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!
相关推荐
左手厨刀右手茼蒿14 小时前
数据仓库的架构演进:从MySQL到ClickHouse到数据湖的工程化实践
linux·嵌入式·系统内核
左手厨刀右手茼蒿14 小时前
创业团队技术选型:别用大厂架构解决小团队问题
linux·嵌入式·系统内核
明志数科14 小时前
宇树科技IPO背后的产业逻辑:人形机器人从“讲故事“到“交数据“
运维·服务器·数据库
外滩运维专家14 小时前
验证码接口上线三天就被刷了,我后来加的几道防线
运维
跨境小彭14 小时前
店群运营实操复盘:批量活动申报自动化优化方案
大数据·运维·人工智能·自动化·跨境电商·temu·temu电商运营
Jlzn888814 小时前
2026年锂电CCS组装线:车规储能双场景兼容自动化方案的技术架构与实践
运维·架构·自动化
bosins15 小时前
将 Hyper-V 上的 Ubuntu 虚拟机内容迁移到 WSL (Windows Subsystem for Linux) 中
linux·windows·ubuntu
AC赳赳老秦15 小时前
语义采集进阶实战:利用 OpenClaw AI 语义识别自动提取网页核心信息,无需手动编写选择器
java·运维·服务器·python·信息可视化·deepseek·openclaw
我星期八休息15 小时前
扩展—DNS与ICMP
linux·服务器·网络
代码方舟15 小时前
企业级对公银行 KYC 架构:基于天远人脸身份证比对A构建自动化客户尽调网关
运维·人工智能·架构·自动化