为避免重复,一些安装内容我直接贴其他大佬的帖子了,我是按照他们的步骤来操作的,趟过一遍,没有问题。
本篇着重在tensort在Cmakelist中如何配置,以及如何配置编译动/静态库,比较基础,也是想做个笔记记录一下。
一、环境
- windows
- windows11
- cuda:11.8
- cudnn:8(注意和cuda配套)
- tensorrt:8.6.1.6
- linux
- ubuntu18.04 x86
- cuda: 11.4
- cudnn: 8
- tensorrt:8.6.1.6
二、安装cuda和cudnn
linux可以参考:ubunu安装cuda
三、安装tensorrt以及配置
均可以参考:https://blog.csdn.net/djstavaV/article/details/125195569
四、CMakeLists如何配置tensorrt以及坑
这里的场景是这样的,有两个工程,A工程来调用B工程,B工程中包含tensorrt的推理操作依赖tensorrt,那么这就需要把B工程打包成库文件,关于Cmakelist详细指导可以跳转到如何在CMakelist中配置,这里编译成库文件,在Cmakelist中,需要把
add_executable(${PROJECT_NAME} ${SOURCE_FILES})
改成
add_library(${PROJECT_NAME} STATIC ${SOURCE_FILES})
注意: 这里一定要用静态库,不然会报这个错误:
ERROR: 1: [dispatchStubs.cpp::deserializeEngine::14] Error Code 1: Internal Error (Unexpected call to stub)
查询资料参考:https://github.com/NVIDIA/TensorRT/issues/3307
然后要注意顺序:
include_directories -> link_directories -> add_library -> target_link_libraries -> install
对了,这里最后一步最好install一下,可以加入到系统路径/usr/local/lib/
中。可参考:
install(TARGETS ${PROJECT_NAME} LIBRARY DESTINATION /usr/local/lib/)
其他的,target_link_libraries
把tensorrt依赖的库文件放入即可,包括cuda的,这里也举例:
target_link_libraries(${PROJECT_NAME} cublas cudart cudadevrt nvinfer nvinfer_dispatch nvinfer_lean nvinfer_plugin nvinfer_vc_plugin nvonnxparser nvparsers)
然后include_directories
和link_directories
分别放入cuda和tensorrt的include文件和lib文件即可。
注意: include、lib和链接库一定要加,不然会出现以下问题:
cmakelist /usr/bin/ld: cannot find -lcublas
- 小抄
add_executable
用来生成可执行文件;add_library
用来生成库文件,其中的关键字SHARED
和STATIC
又分别代表动态库和静态库。
以上就是全部内容,有什么问题可以评论,一起交流 ,Enjoy~