libmodbus在Ubuntu 22.04上按arm64架构编译方法

1. 安装依赖工具

确保系统已安装automakeautoconflibtool和ARM64交叉编译工具链(如gcc-aarch64-linux-gnu):

bash 复制代码
sudo apt-get update
sudo apt-get install -y automake autoconf libtool gcc-aarch64-linux-gnu

2. 下载libmodbus源码

从官方仓库或发布页面获取源码(以3.1.10版本为例):

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

或从github上拉去libmodbus源码:

bash 复制代码
git clone https://github.com/stephane/libmodbus.git

3. 生成构建配置(仅需Git版本)

如果源码未包含configure脚本,需运行autogen.sh生成:

./autogen.sh

4. 配置交叉编译选项

指定ARM64架构和安装路径(示例路径为/opt/libmodbus_arm64):

bash 复制代码
./configure \
  --host=aarch64-linux-gnu \  # 关键:指定ARM64交叉编译工具链前缀
  --prefix=/opt/libmodbus_arm64 \  # 安装路径
  CC=aarch64-linux-gnu-gcc \    # 显式指定交叉编译器(可选)
  CXX=aarch64-linux-gnu-g++

5. 编译并安装

bash 复制代码
make -j$(nproc)  # 多线程编译
make install      # 安装到指定路径

6. 验证编译结果

检查生成的库文件是否为ARM64架构:

bash 复制代码
file /opt/libmodbus_arm64/lib/libmodbus.so*

预期输出

bash 复制代码
/opt/libmodbus_arm64/lib/libmodbus.so:       symbolic link to libmodbus.so.5.1.0
/opt/libmodbus_arm64/lib/libmodbus.so.5:     symbolic link to libmodbus.so.5.1.0
/opt/libmodbus_arm64/lib/libmodbus.so.5.1.0: ELF 64-bit LSB shared object, ARM aarch64, version 1 (SYSV), dynamically linked, BuildID[sha1]=12bcbfd3bcffeb49cf349915764e6de6c3be8e36, with debug_info, not stripped

7. 在ARM64设备上使用

将编译生成的库文件(/opt/libmodbus_arm64/lib/)复制到目标设备的/usr/lib/或指定路径,并在程序中链接:

bash 复制代码
aarch64-linux-gnu-gcc modbus_test.c -o modbus_test \
  -I/opt/libmodbus_arm64/include \
  -L/opt/libmodbus_arm64/lib -lmodbus
./modbus_test

8.设置动态链接库,并使其永久生效:

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

echo "/opt/libmodbus_arm64/lib" | sudo tee /etc/ld.so.conf.d/libmodbus_arm64.conf
sudo ldconfig

9.在ARM64设备上测试

将编译生成的库文件和头文件复制到目标设备后,编写一个简单测试程序验证功能:

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 Modbus context\n");
        return -1;
    }
    printf("Modbus context created successfully!\n");
    modbus_free(ctx);
    return 0;
}

交叉编译并运行:

bash 复制代码
aarch64-linux-gnu-gcc test_modbus.c -o test_modbus \
  -I/opt/libmodbus_arm64/include \
  -L/opt/libmodbus_arm64/lib -lmodbus

# 复制到ARM64设备后运行(需确保库路径正确)
./test_modbus

预期输出

bash 复制代码
Modbus context created successfully!
相关推荐
Piko6144 分钟前
锐捷交换机 DHCP Server部署
运维·网络·笔记
携程DBA6 分钟前
数据库软限制相关研究
linux·mysql·性能
huy1n99 分钟前
Ubuntu 22.04部署Claude Code并接入DeepSeek-V4模型完整教程
linux·ubuntu·deepseek·claude code
ICECREAM1 小时前
I/O 多路复用完全指南 —— select、poll、epoll
linux
进阶的猪1 小时前
Linux 内核移植过程学习
linux·学习
问简3 小时前
【共享盘】ubuntu、windows
linux·windows·ubuntu
Splashtop高性能远程控制软件3 小时前
聊天工具与专业远程支持软件:企业 IT 远程支持工具选型的五个评估维度
运维·远程工作·splashtop
运维大师3 小时前
【安全与故障排查】07-混沌工程落地:用故障注入提升系统韧性
运维
小生不才yz4 小时前
Shell脚本精读 · S13-01 | POSIX sh 与 Bash:语法对照表
linux
阿拉斯攀登4 小时前
平台设备驱动:platform bus 与设备树
linux·嵌入式硬件·嵌入式·linux驱动·字符设备驱动