1. 安装依赖工具
确保系统已安装automake、autoconf、libtool和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!