请问怎么在Linux x86的机器上交叉编Linux armv7上用的onnxruntime的动态库?
2条回答 默认 最新
檀越@新空间 2025-12-31 14:22关注下午好🌅🌅🌅
本答案参考通义千问要在Linux x86机器上交叉编译适用于 Linux armv7 架构的 ONNX Runtime 动态库(
.so文件),你需要使用 交叉编译工具链 和 ONNX Runtime 的构建系统。以下是一个详细的步骤指南,包括关键点和代码示例。
✅ 一、准备工作
1. 安装依赖项
确保你已经安装了以下依赖项:
sudo apt-get update sudo apt-get install -y build-essential cmake git libssl-dev libprotobuf-dev protobuf-compiler2. 下载 ONNX Runtime 源码
从 GitHub 上克隆 ONNX Runtime 仓库:
git clone https://github.com/microsoft/onnxruntime.git cd onnxruntime3. 获取 ARMv7 交叉编译工具链
你可以使用
arm-linux-gnueabihf-gcc工具链,通常在 Ubuntu 系统中可以通过如下命令安装:sudo apt-get install -y g++-arm-linux-gnueabihf或者,如果你需要更完整的工具链,可以下载 Linaro GCC
✅ 二、配置交叉编译环境
1. 设置环境变量
设置目标架构为
armv7,并指定交叉编译器路径:export TARGET_ARCH=armv7 export CROSS_COMPILE=arm-linux-gnueabihf- export CC=${CROSS_COMPILE}gcc export CXX=${CROSS_COMPILE}g++ export AR=${CROSS_COMPILE}ar export RANLIB=${CROSS_COMPILE}ranlib注意: 如果你使用的是 Linaro 工具链,可能需要将
CROSS_COMPILE替换为实际路径,例如/opt/linaro/gcc-arm-linux-gnueabihf-4.9.4/bin/arm-linux-gnueabihf-
✅ 三、构建 ONNX Runtime
1. 创建构建目录
mkdir build_armv7 cd build_armv72. 配置构建
使用 CMake 进行配置,并指定目标平台:
cmake -DCMAKE_TOOLCHAIN_FILE=../tools/cmake/platforms/LinuxARM.cmake \ -DBUILD_SHARED_LIBS=ON \ -DONNXRUNTIME_BUILD_SHARED_LIB=ON \ -DUSE_CUDA=OFF \ -DENABLE_CXX_TESTS=OFF \ -DENABLE_PYTHON=OFF \ -DENABLE_JAVA=OFF \ ..重点说明:
-DCMAKE_TOOLCHAIN_FILE是 ONNX Runtime 提供的用于交叉编译的工具链文件。-DBUILD_SHARED_LIBS=ON表示构建动态库(.so)。-DONNXRUNTIME_BUILD_SHARED_LIB=ON同样是为了生成共享库。
3. 编译
make -j$(nproc)注意: 根据你的 CPU 核心数,可以调整
-j参数以加快编译速度。
✅ 四、获取编译结果
编译完成后,动态库会生成在
build_armv7目录下,具体路径如下:build_armv7/libonnxruntime.so此外,还有一些其他依赖库,如:
build_armv7/libonnxruntime_providers_shared.so
✅ 五、验证是否成功
你可以使用
file命令验证生成的.so文件是否是 ARMv7 架构:file build_armv7/libonnxruntime.so输出应类似如下内容:
build_armv7/libonnxruntime.so: ELF 32-bit LSB shared object, ARM, EABI5, version 1 (SYSV), dynamically linked, not stripped
✅ 六、完整步骤总结(有序列表)
-
安装依赖项:
build-essential,cmake,git,libssl-dev,libprotobuf-dev,protobuf-compiler
-
获取 ONNX Runtime 源码:
- 使用
git clone获取源码
- 使用
-
安装 ARMv7 交叉编译工具链:
- 安装
g++-arm-linux-gnueabihf或使用 Linaro 工具链
- 安装
-
设置环境变量:
- 设置
TARGET_ARCH,CROSS_COMPILE,CC,CXX,AR,RANLIB
- 设置
-
创建构建目录并配置 CMake:
- 使用
cmake指定工具链文件和构建选项
- 使用
-
执行编译:
- 使用
make编译 ONNX Runtime
- 使用
-
获取动态库:
- 查看
build_armv7目录下的.so文件
- 查看
-
验证编译结果:
- 使用
file命令确认目标架构是否正确
- 使用
✅ 七、注意事项
- 如果你还需要支持 CUDA 或其他硬件加速,需调整 CMake 配置并安装对应的 SDK。
- 交叉编译过程中可能会遇到一些依赖问题,建议查看 ONNX Runtime 的官方文档或 GitHub Issues。
- 如果你打算部署到嵌入式设备(如 Raspberry Pi),请确保目标设备的内核版本与编译时一致。
✅ 八、修改后的 CMake 示例(可选)
如果你要自定义 CMake 配置,可以参考如下脚本:
#!/bin/bash # 设置环境变量 export TARGET_ARCH=armv7 export CROSS_COMPILE=arm-linux-gnueabihf- export CC=${CROSS_COMPILE}gcc export CXX=${CROSS_COMPILE}g++ export AR=${CROSS_COMPILE}ar export RANLIB=${CROSS_COMPILE}ranlib # 创建构建目录 mkdir -p build_armv7 cd build_armv7 # 配置 CMake cmake -DCMAKE_TOOLCHAIN_FILE=../tools/cmake/platforms/LinuxARM.cmake \ -DBUILD_SHARED_LIBS=ON \ -DONNXRUNTIME_BUILD_SHARED_LIB=ON \ -DUSE_CUDA=OFF \ -DENABLE_CXX_TESTS=OFF \ -DENABLE_PYTHON=OFF \ -DENABLE_JAVA=OFF \ .. # 编译 make -j$(nproc)
如果你还有其他问题,比如如何在 ARM 设备上运行该库,或者如何集成到你的项目中,请继续提问!
解决 无用评论 打赏 举报