在Ubuntu 2.04上如何按照x86_64架构编译libmodbus库

在Ubuntu上按x86_64架构编译libmodbus的核心步骤是使用本地GCC工具链(无需交叉编译),并通过configure脚本指定安装路径

以下是详细流程:

一、安装基础依赖

确保系统已安装编译工具和开发库:

bash 复制代码
sudo apt update
sudo apt install -y automake autoconf libtool gcc make

二、获取并解压源码

从官方仓库下载源码包(以3.1.11版本为例):

bash 复制代码
wget https://libmodbus.org/releases/libmodbus-3.1.11.tar.gz
tar -xzf libmodbus-3.1.11.tar.gz
cd libmodbus-3.1.11

三、生成构建配置(仅Git版本需要)

如果源码未包含configure脚本,运行以下命令生成:

bash 复制代码
./autogen.sh

四、配置编译选项

指定安装路径(示例为/opt/libmodbus_x86_64):

bash 复制代码
./configure \
  --prefix=/opt/libmodbus_x86_64 \  # 安装路径
  --build=x86_64-linux-gnu          # 显式声明架构(可选)

关键参数说明:

  • --prefix:控制库和头文件的安装目录
  • --build:明确指定架构(通常可省略,configure会自动检测)

五、编译并安装

bash 复制代码
make -j$(nproc)      # 多线程编译
sudo make install    # 需要root权限写入系统目录

六、验证编译结果

  1. 检查库架构:
bash 复制代码
file /opt/libmodbus_x86_64/lib/libmodbus.so*

预期输出:

复制代码
ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, ...

测试简单程序:

cpp 复制代码
#include <modbus/modbus.h>
#include <stdio.h>

int main() {
    modbus_t *ctx = modbus_new_tcp("127.0.0.1", 1502);
    if (ctx == NULL) {
        fprintf(stderr, "Failed to create context\n");
        return 1;
    }
    printf("Libmodbus x86_64 version: %s\n", LIBMODBUS_VERSION_STRING);
    modbus_free(ctx);
    return 0;
}
bash 复制代码
gcc test_modbus.c -o test_modbus \
  -I/opt/libmodbus_x86_64/include \
  -L/opt/libmodbus_x86_64/lib -lmodbus

export LD_LIBRARY_PATH=/opt/libmodbus_x86_64/lib:$LD_LIBRARY_PATH
./test_modbus

预期输出:

复制代码
Libmodbus x86_64 version: 3.1.11

如出现链接错误(未找到库)

临时解决方案:

bash 复制代码
export LD_LIBRARY_PATH=/opt/libmodbus_x86_64/lib:$LD_LIBRARY_PATH

永久解决方案:

bash 复制代码
echo "/opt/libmodbus_x86_64/lib" | sudo tee /etc/ld.so.conf.d/libmodbus_x86_64.conf
sudo ldconfig

关键点总结

步骤 关键命令/参数 作用
配置 ./configure --prefix=/opt/... 指定安装路径
编译 make -j$(nproc) 多线程加速编译
架构验证 file libmodbus.so 确认生成x86_64架构库
运行时路径配置 LD_LIBRARY_PATH或ldconfig 解决动态库加载问题

通过以上步骤,即可在Ubuntu上成功编译出适用于x86_64架构的libmodbus库。

相关推荐
0+1116 小时前
Linux --从 poll 到 epoll多路转接
linux·服务器·1024程序员节
青瓦梦滋6 小时前
WebSocket协议
linux·服务器·网络·c++·websocket·网络协议·http
桌面运维家6 小时前
旧电脑跑不动课程软件,VDI云桌面怎样接着用?
运维·服务器·虚拟化·pve·vdi·云桌面
zhang133830890757 小时前
传统机械三杯式风速传感器易磨损冻堵?CG-88金属超声波风速风向传感器给出免运维方案
运维·服务器·网络·人工智能·自动化
知已难寻7 小时前
第 2 篇 · 云的地基:服务器、存储、网络三大基础设施
运维·服务器·网络·云原生·云计算·负载均衡·1024程序员节
2601_949847759 小时前
bcrypt.js 跨端三方库仓颉适配全流程
linux·运维·ubuntu
m0_639906949 小时前
Linux 操作系统入门:目录结构、服务排查常用命令、Shell 脚本基础
linux·运维·后端
今天重构了吗10 小时前
Linux 上 rm -rf 删错了能找回吗
运维·服务器
KaiwuDB10 小时前
KaiwuDB 分布式集群扩缩容,从原理到完整操作踩坑总结
运维·数据库·分布式
codezzzsleep10 小时前
学术汇报 PPT 自动化生成实战指南
运维·自动化·powerpoint