TensorFlow1.8+TensorRT4 C++部署优化图报错:TRTEngineOp未注册
解决TensorRT优化图在C++中运行的
TRTEngineOp未注册错误 这个问题我之前在TF1.x搭配TRT的项目里也碰到过,本质就是你的C程序没把TensorRT的TensorFlow插件库链接进去,导致TRT专属的TRTEngineOp没被注册到TensorFlow的运行时环境中——Python环境里因为TRT插件已经集成到TF的Python绑定里了,所以跑起来没问题,但C得手动处理依赖和注册。
下面是一步步的解决办法:
1. 先找对依赖库的位置
你需要找到这几个关键库:
- TensorFlow的C++核心库:
libtensorflow.so(Linux)或tensorflow.lib(Windows) - TensorRT核心库:
libnvinfer.so、libnvparsers.so - TensorRT的TF插件库:
libnvinfer_plugin.so(这个是关键,没它就找不到TRTEngineOp)
这些库的位置取决于你是用预编译包还是源码编译的,比如TRT4的预编译包会把库放在/usr/local/cuda/targets/x86_64-linux/lib(Linux)或者对应的Windows路径下。
2. 修改编译配置(以CMake和g++为例)
如果用CMake构建项目,把这些库加到你的CMakeLists.txt里:
# 替换成你实际的库路径 set(TF_LIB_DIR "/path/to/tensorflow/lib") set(TRT_LIB_DIR "/usr/local/cuda/targets/x86_64-linux/lib") target_link_libraries(your_cpp_app ${TF_LIB_DIR}/libtensorflow.so ${TRT_LIB_DIR}/libnvinfer.so ${TRT_LIB_DIR}/libnvparsers.so ${TRT_LIB_DIR}/libnvinfer_plugin.so )
要是直接用g++编译,就加链接参数:
g++ your_infer_app.cpp -o your_infer_app \ -L/path/to/tensorflow/lib -ltensorflow \ -L/usr/local/cuda/targets/x86_64-linux/lib -lnvinfer -lnvparsers -lnvinfer_plugin
3. 在代码里显式注册TRT插件
光链接库还不够,得在程序启动时主动调用插件注册函数,确保TRTEngineOp被加载到TF里:
#include "tensorflow/core/public/session.h" #include "NvInferPlugin.h" // TRT插件的头文件,路径根据你的安装调整 int main(int argc, char* argv[]) { // 先注册TRT插件,第一个参数传nullptr就行,第二个是插件名字(留空用默认) initLibNvInferPlugins(nullptr, ""); // 接下来正常加载优化后的TF图、创建Session、运行推理 tensorflow::Session* session; tensorflow::Status status = tensorflow::NewSession(tensorflow::SessionOptions(), &session); // ... 后续代码 ... return 0; }
TRT4里initLibNvInferPlugins是官方推荐的注册函数,别记错了。
4. 运行时确保库能被找到
编译完程序,运行前要让系统能找到这些动态库:
Linux下设置LD_LIBRARY_PATH:
export LD_LIBRARY_PATH=/path/to/tensorflow/lib:/usr/local/cuda/targets/x86_64-linux/lib:$LD_LIBRARY_PATH ./your_infer_app
Windows的话,把库所在路径加到PATH环境变量里就行。
额外要注意的坑
- 一定要保证你C++里用的TRT版本和Python里的完全一致,版本不匹配大概率会出问题。
- 确认你的TensorFlow 1.8是支持TRT的版本——如果是预编译的TF包,要找带TRT标识的;如果是源码编译的,要在编译时开启
--with_tensorrt选项。 - 要是你自己编译了TF的TRT插件,要确保编译时的CUDA、编译器版本和你的C++项目完全一致,不然会出现链接或者运行时错误。
内容的提问来源于stack exchange,提问作者Tom
相关产品推荐
相关产品推荐

