在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_PATHldconfig 解决动态库加载问题

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

相关推荐
Piko61411 分钟前
锐捷 VSU 虚拟化堆叠配置
运维·网络·笔记
ljs64827395128 分钟前
Linux运维实操:vi编辑器永久配置静态IP(CentOS系列)
linux·运维·编辑器
dddwjzx28 分钟前
嵌入式Linux C应用编程入门——高级I/O
linux·嵌入式
2301_7803039033 分钟前
网络安全、自动化运维、ERP、CRM、MES
运维·web安全·网络安全·自动化·安全威胁分析
IpdataCloud1 小时前
AI生成的Avalon恶意框架怎么防?用IP离线库识别模块化C2通信
运维·人工智能·网络协议·tcp/ip·ip
极客先躯1 小时前
高级java每日一道面试题-2026年03月30日-实战篇[Docker]-如何监控容器的网络流量?
java·运维·docker·容器·prometheus·高级面试
Waay2 小时前
Linux 三个核心环境变量配置文件、作用域、生效方式完整梳理
linux·运维·学习·云原生·容器
星空语2 小时前
音频001_Android+Linux车载/手机音频全链路分层架构图
android·linux·音视频
Piko6142 小时前
锐捷交换机 DHCP Server部署
运维·网络·笔记
携程DBA2 小时前
数据库软限制相关研究
linux·mysql·性能