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!
相关推荐
A小辣椒16 小时前
TShark:Wireshark CLI 功能
linux
A小辣椒20 小时前
TShark:基础知识
linux
AlfredZhao1 天前
OCI 明明分配了 200G 系统盘,为什么 df 只看到 30G?
linux·oci
AlfredZhao2 天前
vi 删除指定范围的行,不用再反复按 dd
linux·vi
用户9718356334662 天前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
猪脚踏浪2 天前
linux 拷贝文件或目录到指定的位置
linux
大树882 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠2 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质2 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
bush42 天前
嵌入式linux学习记录十四、术语
linux·嵌入式