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!
相关推荐
编程的一拳超人10 小时前
DeepSeek Harness Linux/macOS/Windows 本地下载、启动与模型配置指南
linux·windows·macos·deepseek
醉颜凉10 小时前
网络安全必学:粘性MAC地址(Sticky MAC)原理与应用全解析
运维·服务器·网络·安全·web安全
时凌云.10 小时前
【2026最新】JDK 下载安装与环境配置全教程(Windows/Mac/Linux 三平台,零基础友好)
java·linux·macos
不懂的浪漫11 小时前
ToDesk 连接 Linux 后分辨率过低的解决方法
linux·运维·数据库
姚不倒11 小时前
etcd 学习系列(七):排障指南 —— 常见问题与解决方案
运维·etcd
广州灵眸科技有限公司11 小时前
从手动三步到上电即连:4G模组systemd开机自连方案
linux·运维·服务器·开发语言·网络·人工智能·php
Lear12 小时前
Docker 私有仓库搭建与使用
运维·自动化运维
姚不倒13 小时前
etcd 学习系列(一):从业务需求出发,理解 etcd 是什么
运维·数据库·etcd
susplus13 小时前
【linux应用软件编程】数据库sqlite3
linux·数据库·sqlite
GeW13 小时前
RHCE的评分潜规则:这样做实验,每题多拿20%分数
linux