onnxruntime编译静态库

513 阅读1分钟

1. 背景

在将onnx格式的模型部署到边缘端,然后通过C语言进行调用执行的过程中,发现onnxruntime没有适合边缘端架构的版本,考虑在编译服务器上进行静态编译生成可执行文件放置在边缘端,但是静态编译需要依赖onnxruntime的静态库,GitHub中只提供了动态库,只好使用源代码编译成静态库,具体操作如下。

2. 准备工作

  1. 从GitHub中下载合适的onnxruntime版本的源码包onnxruntime,放到服务器合适的位置并解压缩;
  2. 服务器中需要安装如下依赖 cmake gcc-c++ make python3-devel protobuf-compiler protobuf-devel git patch wget unzip zlib-devel openssl-devel 编译过程中如果缺少,再进行安装。

3. 编译

首先,进入onnxruntime源码包解压缩的目录,执行如下命令:

./build.sh \
  --config Release \
  --cmake_extra_defines "onnxruntime_BUILD_SHARED_LIB=OFF;onnxruntime_USE_SYSTEM_ONNX=ON" \
  --parallel $(nproc) \
  --skip_tests \
  --skip_onnx_tests \
  --cmake_path /usr/bin/cmake \
  --allow_running_as_root \
  --skip_submodule_sync

其中, --config Release:指定构建配置为 Release 模式;

--cmake_extra_defines "onnxruntime_BUILD_SHARED_LIB=OFF":向 CMake 传递额外的自定义变量,

  • 其中,onnxruntime_BUILD_SHARED_LIB=OFF表示强制构建静态库(.a 文件)而不是动态库(.so 文件)

--parallel $(nproc):设置并行编译的线程数,$(nproc)表示自动检测并使用系统所有可用的 CPU 核心;

--skip_tests:跳过单元测试的构建和执行; --skip_onnx_tests:跳过 ONNX 兼容性测试套件;

--cmake_path /usr/bin/cmake:指定使用的 CMake 可执行文件路径;

--allow_running_as_root:允许以 root 用户身份运行构建脚本;

--skip_submodule_sync:跳过 Git 子模块的同步和更新。解决 "not a git repository" 错误(当使用源码包而非 git clone 时)

编译过程中需要从GitHub上下载所需依赖,如果下载出错,则需手动下载。整个编译过程的耗时和服务器的性能有关系。

4. 结束

编译结束后,会生成很多以.a结尾的文件,就是静态文件。