在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库。

相关推荐
一技安身5 小时前
【信创】银河麒麟V10、统信UOS解压7Z文件
linux·运维·服务器
奔跑的架构师6 小时前
[A-50]ARMv9/v8-DVFS系统架构
linux·arm开发·架构·系统架构·arm
迷途呀6 小时前
CI/CD 自动化部署实践:让代码提交后自动上线
linux·运维·nginx·ci/cd·自动化
闲云自留地6 小时前
动手玩 Nova:Hypervisor、主机聚合、可用分区、虚拟机生命周期实操
运维·架构·openstack
赴生-6 小时前
Liunx 操作系统 进程概念(上)
linux
binqian6 小时前
【linux】OpenSSH升级文档
linux·运维·网络
吴声子夜歌6 小时前
Shell编程——if条件语句
linux·运维·shell
和裕7 小时前
蜂窝板 vs 七层瓦楞重型纸箱:大件工业设备运输性能与成本全对比
大数据·运维·网络·人工智能·算法
Dawn-bit7 小时前
Linux 运维基础扩展:跳板机、堡垒机与物理服务器全流程
linux·运维·服务器·云计算·运维开发
新时代牛马7 小时前
Linux 定时任务:crontab、anacron 与systemd timer
linux·运维·服务器