1. 背景
在将onnx格式的模型部署到边缘端,然后通过C语言进行调用执行的过程中,发现onnxruntime没有适合边缘端架构的版本,考虑在编译服务器上进行静态编译生成可执行文件放置在边缘端,但是静态编译需要依赖onnxruntime的静态库,GitHub中只提供了动态库,只好使用源代码编译成静态库,具体操作如下。
2. 准备工作
- 从GitHub中下载合适的onnxruntime版本的源码包onnxruntime,放到服务器合适的位置并解压缩;
- 服务器中需要安装如下依赖
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结尾的文件,就是静态文件。