mmdeploy源码编译时错误之——error: ‘CustomOpApi’ in namespace ‘Ort’ does not name a type;

编译参考文档:https://mmdeploy.readthedocs.io/zh-cn/latest/01-how-to-build/linux-x86_64.html

问题现象

编译环境:

  • ubuntu 22.04
  • gcc/g+±11
  • cmake16
  • cuda-11.8
  • cudnn-linux-x86_64-8.9.6.50
  • ppl.cv-0.7.0
  • TensorRT-8.6.1.6
  • onnxruntime 更换了各种版本(onnxruntime-linux-x64-1.16.1,
    onnxruntime-linux-x64-1.8.1, onnxruntime-linux-x64-gpu-1.16.1,
    onnxruntime-linux-x64-gpu-1.18.1, onnxruntime-linux-x64-gpu-1.8.1)

编译的时候始终报错:error: ‘CustomOpApi’ in namespace ‘Ort’ does not name a type; 如下图:
‘CustomOpApi’ in namespace ‘Ort’ does not name a type
大概能确定是找不到 CustomOpApi 的定义,经过全盘搜索 grep -rn “CustomOpApi” *.h | more ,发现该定义位于 ./onnxruntime-linux-x64-1.8.1/include/onnxruntime_cxx_inline.h, ./onnxruntime-linux-x64-gpu-1.8.1/include/onnxruntime_cxx_inline.h 头文件中。

原来是我参考了 ONNX Runtime built with cuDNN 8.x are not compatible with cuDNN 9.x. 说明将 onnxruntime 的版本升级成 1.18.1 了,导致找不到 CustomOpApi 这个类的定义。
在这里插入图片描述
所有这里有一个坑:

mmdeploy 官方文档源码编译依赖的 onnxruntime-1.8.1 只兼容 CUDA-11.0.3 和
cnDNN-8.0.4,而我的编译环境 CUDA-11.8 和 cnDNN-8.9 要求使用 onnxruntime-1.18。

还不确定真实使用 onnxruntime 推理引擎时候会不会有问题。

解决办法

配置环境变量,编译 mmdeploy 源码时使用 onnxruntime-1.8.1 版本依赖即可。

export ONNXRUNTIME_DIR=path/to/onnxruntime-1.8.1

tricks: cmake 输出 gcc/g++ 编译明细的配置参数

一般情况下 cmake 不会输出 gcc/g++ 编译命令,及详细参数的,但是这些参数非常有助于检查详细参数(如:头文件和依赖库是否配置正确、完善),进而排查编译问题。包括以下两个步骤:

1. cmake 生成 MakeFile :增加 -DCMAKE_VERBOSE_MAKEFILE=ON

rm -rf build && mkdir -p build && cd build
cmake .. \
    -DCMAKE_CXX_COMPILER=g++-11 \
    -DMMDEPLOY_BUILD_SDK=ON \
    -DMMDEPLOY_BUILD_EXAMPLES=ON \
    -DMMDEPLOY_BUILD_SDK_PYTHON_API=ON \
    -DMMDEPLOY_TARGET_DEVICES="cuda;cpu" \
    -DMMDEPLOY_TARGET_BACKENDS="trt;ort" \
    -Dpplcv_DIR=${PPLCV_DIR}/cuda-build/install/lib/cmake/ppl \
    -DTENSORRT_DIR=${TENSORRT_DIR} \
    -DCUDNN_DIR=${CUDNN_DIR} \
    -DONNXRUNTIME_DIR=${ONNXRUNTIME_DIR} \
    -DCMAKE_VERBOSE_MAKEFILE=ON

2. 编译:增加 VERBOSE=1 参数

cmake --build . -- -j$(nproc) VERBOSE=1

配置好之后编译时会输出以下详细信息啦:
(-isystem 参数有助于抑制使用尖括号引用的第三方头文件带来的编译警告)

cd /home/chenghj11/mmdeploy/mmdeploy/build-ort/csrc/mmdeploy/backend_ops/onnxruntime && /usr/bin/g++-11 -DMMDEPLOY_API_EXPORTS=1 -I/home/chenghj11/mmdeploy/mmdeploy/csrc/mmdeploy/backend_ops/onnxruntime/common -I/home/chenghj11/mmdeploy/mmdeploy/csrc/mmdeploy/backend_ops/onnxruntime/../common -I/home/chenghj11/mmdeploy/mmdeploy/csrc -isystem /home/chenghj11/mmdeploy/onnxruntime-linux-x64-gpu-1.8.1/include -O3 -fPIC -fvisibility=hidden -std=gnu++14 -MD -MT csrc/mmdeploy/backend_ops/onnxruntime/CMakeFiles/mmdeploy_onnxruntime_ops_obj.dir/onnxruntime_register.cpp.o -MF CMakeFiles/mmdeploy_onnxruntime_ops_obj.dir/onnxruntime_register.cpp.o.d -o CMakeFiles/mmdeploy_onnxruntime_ops_obj.dir/onnxruntime_register.cpp.o -c /home/chenghj11/mmdeploy/mmdeploy/csrc/mmdeploy/backend_ops/onnxruntime/onnxruntime_register.cpp

  • 14
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值