最近在学习c++方面的部署应用,想着先拿熟悉的ONNX下手试试,却发现需要编译C++版本的ONNXRuntime。几经波折,在经历了一上午的编译后,终于成功了。写下这篇文章记录我的编译过程。
1.基础编译环境要求
这点是比较坑的,ONNXRuntime C++需要的cmake版本:
3.26.0
及以上,gcc版本:
9
及以上。你可以通过以下两个命令查看cmake和gcc的版本:
cmake --version
gcc --version
如果你的cmake和gcc版本不符合要求,可以参考以下两位大神的博客,照着来完全是ok的。
2.下载源码并编译
升级完成 Cmake和gcc后,就可以下载源码,开始编译之旅了。
2.1安装依赖
sudo apt update
sudo apt install -y build-essential cmake git libprotobuf-dev protobuf-compiler
2.2克隆ONNX Runtime源代码仓库
git clone --recursive https://github.com/microsoft/onnxruntime.git
cd onnxruntime
2.3配置和构建ONNX Runtime
这将使用CMake进行配置,并使用Release配置项构建ONNX Runtime共享库。
--parallel
选项可用于并行构建以加快速度。
./build.sh --config Release --build_shared_lib --parallel
2.4安装ONNX Runtime
这将在系统上安装ONNX Runtime共享库和头文件。
cd build/Linux/Release
sudo make install
2.5验证安装
创建一个名为”
test.cpp"
的文件,并将其中的<path_to_your_onnx_model>替换成你实际的onnx模型的地址。
#include <onnxruntime/core/providers/cpu/cpu_provider_factory.h>
#include <onnxruntime/core/session/onnxruntime_cxx_api.h>
#include <iostream>
int main() {
Ort::Env env(ORT_LOGGING_LEVEL_WARNING, "ONNXRuntime");
Ort::SessionOptions session_options;
Ort::Session session(env, "<path_to_your_onnx_model>", session_options);
std::cout << "ONNX Runtime installed and configured successfully!" << std::endl;
return 0;
}
然后编译C++示例:
g++ test.cpp -o test -I /usr/local/include/onnxruntime -L /usr/local/lib -lonnxruntime
./test
如果你编译不通过,那你可能需要替换
“<onnxruntime/core/providers/cpu/cpu_provider_factory.h>”
“<onnxruntime/core/session/onnxruntime_cxx_api.h>”的地址。
查看方式如下,不出意外你会得到你的库的实际地址,然后替换即可:
locate cpu_provider_factory.h
locate onnxruntime_cxx_api.h
重新编译,运行./test成功后,你会得到这样的信息:
至此,ONNXRuntime C++ API成功编译完成,可以开始“愉快”的码代码之路了!