使用NDK工具链交叉编译libmodbus.so

1、环境准备

  • Ubuntu 20.04
  • git
  • ndk

2、ndk下载及配置环境变量

  2.1、命令窗口执行:wget https://googledownloads.cn/android/repository/android-ndk-r29-linux.zip,下载压缩包

  2.2、下载成功后,执行命令:unzip android-ndk-r29-linux.zip,解压缩

  2.3执行vim ~/.bashrc,敲击i编辑:

export NDK=/home/andea/ndk/android-ndk-r29  #指定NDK路径
export TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/linux-x86_64  #指定工具链
export PATH=$TOOLCHAIN/bin:$PATH                  #添加到环境变量,系统能够在任何位置直接调用该目录下的程序
export CC=$TOOLCHAIN/bin/aarch64-linux-android21-clang     #指定编译器
export AR=$TOOLCHAIN/bin/llvm-ar                  #指定打包工具

  2.4、esc退出,敲击:wq保存,执行source ~/.bashrc使生效

3、git clone https://github.com/stephane/libmodbus.git 下载libmodbus源码

4、cd libmodbus,然后执行./autogen.sh,生成.configure文件

5、生成so。

  5.1、方法一、手动生成,仅生成单一环境的动态库。执行命令 ./configure --host=aarch64-linux-android --prefix=$(pwd)/install && make install。

  5.2、方法二、采用脚本形式(由deepseek创建),执行touch build_libmodbus.sh。

  5.3、vim build_libmodbus.sh,编辑build_libmodbus.sh。ESC退出,执行":wq"保存退出。

#!/bin/bash

# ===== 只需修改这里的 NDK 路径 =====
NDK=~/ndk/android-ndk-r29
# ==================================

TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/linux-x86_64

# 要编译的架构列表
builds=(
    "arm64-v8a:aarch64-linux-android:aarch64-linux-android21-clang"
    "armeabi-v7a:armv7a-linux-androideabi:armv7a-linux-androideabi21-clang"
    "x86_64:x86_64-linux-android:x86_64-linux-android21-clang"
    "x86:i686-linux-android:i686-linux-android21-clang"
)

for build in "${builds[@]}"; do
    IFS=':' read -r abi host compiler <<< "$build"
    echo ">>> 正在编译 $abi ..."
    
    make clean 2>/dev/null   # 忽略 clean 可能的错误
    
    # 直接通过 CC 变量指定编译器,无需 export
    CC=$TOOLCHAIN/bin/$compiler \
    AR=$TOOLCHAIN/bin/llvm-ar \
    ./configure --host=$host --prefix=$(pwd)/install_$abi
    
    make && make install
    echo ">>> $abi 编译完成!"
    echo "---"
done

echo "🎉 所有架构编译完成!"

  5.4、chmod +x build_libmodbus.sh授予可执行权限。

  5.5、执行脚本./build_libmodbus.sh

6、完成编译。相关文件夹下输出对应的so

image

 

posted @ 2026-07-21 13:43  !>Mon<!  阅读(7)  评论(0)    收藏  举报