【解决:tensorrt c++编译gpu cuda报错:“error C2912: 显式专用化”或“不是函数模板的专用化”】

cuda/gpu报错,会提示类似如下错误:

error C2059: 语法错误:“volatile”
error C2912: 显式专用化
error C2065: “LOAD_CS”: 未声明的标识符
”不是函数模板的专用化

完整报错log部分截取如下:

Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.9\include\cub/thread/thread_load.cuh(291): error C2059: 语法错误:“volatile”
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.9\include\cub/thread/thread_load.cuh(291): error C2912: 显式专用化;“ulonglong2 cub::CUB_200802_SM_890::ThreadLoad<LOAD_CA,const ulonglong2*>(const ulonglong2 *)”不是函数模板的专用化
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.9\include\cub/thread/thread_load.cuh(291): error C2912: 显式专用化;“ushort4 cub::CUB_200802_SM_890::ThreadLoad<LOAD_CA,const ushort4*>(const ushort4 *)”不是函数模板的专用化
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.9\include\cub/thread/thread_load.cuh(291): error C2912: 显式专用化;“uint2 cub::CUB_200802_SM_890::ThreadLoad<LOAD_CA,const uint2*>(const uint2 *)”不是函数模板的专用化
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.9\include\cub/thread/thread_load.cuh(291): error C2912: 显式专用化;“unsigned __int64 cub::CUB_200802_SM_890::ThreadLoad<LOAD_CA,const unsigned __int64*>(const unsigned __int64 *)”不是函数模板的专用化
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.9\include\cub/thread/thread_load.cuh(291): error C2912: 显式专用化;“unsigned int cub::CUB_200802_SM_890::ThreadLoad<LOAD_CA,const unsigned int*>(const unsigned int *)”不是函数模板的专用化
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.9\include\cub/thread/thread_load.cuh(291): error C2912: 显式专用化;“unsigned short cub::CUB_200802_SM_890::ThreadLoad<LOAD_CA,const unsigned short*>(const unsigned short *)”不是函数模板的专用化
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.9\include\cub/thread/thread_load.cuh(291): error C2912: 显式专用化;“unsigned char cub::CUB_200802_SM_890::ThreadLoad<LOAD_CA,const unsigned char*>(const unsigned char *)”不是函数模板的专用化
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.9\include\cub/thread/thread_load.cuh(292): error C2065: “LOAD_CG”: 未声明的标识符
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.9\include\cub/thread/thread_load.cuh(292): error C2912: 显式专用化;“uint4 cub::CUB_200802_SM_890::ThreadLoad<LOAD_CG,const uint4*>(const uint4 *)”不是函数模板的专用化
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.9\include\cub/thread/thread_load.cuh(292): error C2059: 语法错误:“volatile”
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.9\include\cub/thread/thread_load.cuh(292): error C2912: 显式专用化;“ulonglong2 cub::CUB_200802_SM_890::ThreadLoad<LOAD_CG,const ulonglong2*>(const ulonglong2 *)”不是函数模板的专用化
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.9\include\cub/thread/thread_load.cuh(292): error C2912: 显式专用化;“ushort4 cub::CUB_200802_SM_890::ThreadLoad<LOAD_CG,const ushort4*>(const ushort4 *)”不是函数模板的专用化
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.9\include\cub/thread/thread_load.cuh(292): error C2912: 显式专用化;“uint2 cub::CUB_200802_SM_890::ThreadLoad<LOAD_CG,const uint2*>(const uint2 *)”不是函数模板的专用化
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.9\include\cub/thread/thread_load.cuh(292): error C2912: 显式专用化;“unsigned __int64 cub::CUB_200802_SM_890::ThreadLoad<LOAD_CG,const unsigned __int64*>(const unsigned __int64 *)”不是函数模板的专用化
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.9\include\cub/thread/thread_load.cuh(292): error C2912: 显式专用化;“unsigned int cub::CUB_200802_SM_890::ThreadLoad<LOAD_CG,const unsigned int*>(const unsigned int *)”不是函数模板的专用化
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.9\include\cub/thread/thread_load.cuh(292): error C2912: 显式专用化;“unsigned short cub::CUB_200802_SM_890::ThreadLoad<LOAD_CG,const unsigned short*>(const unsigned short *)”不是函数模板的专用化
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.9\include\cub/thread/thread_load.cuh(292): error C2912: 显式专用化;“unsigned char cub::CUB_200802_SM_890::ThreadLoad<LOAD_CG,const unsigned char*>(const unsigned char *)”不是函数模板的专用化
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.9\include\cub/thread/thread_load.cuh(293): error C2065: “LOAD_CS”: 未声明的标识符
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.9\include\cub/thread/thread_load.cuh(293): error C2912: 显式专用化;“uint4 cub::CUB_200802_SM_890::ThreadLoad<LOAD_CS,const uint4*>(const uint4 *)”不是函数模板的专用化
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.9\include\cub/thread/thread_load.cuh(293): error C2059: 语法错误:“volatile”
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.9\include\cub/thread/thread_load.cuh(293): error C2912: 显式专用化;“ulonglong2 cub::CUB_200802_SM_890::ThreadLoad<LOAD_CS,const ulonglong2*>(const ulonglong2 *)”不是函数模板的专用化
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.9\include\cub/thread/thread_load.cuh(293): error C2912: 显式专用化;“ushort4 cub::CUB_200802_SM_890::ThreadLoad<LOAD_CS,const ushort4*>(const ushort4 *)”不是函数模板的专用化
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.9\include\cub/thread/thread_load.cuh(293): error C2912: 显式专用化;“uint2 cub::CUB_200802_SM_890::ThreadLoad<LOAD_CS,const uint2*>(const uint2 *)”不是函数模板的专用化
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.9\include\cub/thread/thread_load.cuh(293): error C2912: 显式专用化;“unsigned __int64 cub::CUB_200802_SM_890::ThreadLoad<LOAD_CS,const unsigned __int64*>(const unsigned __int64 *)”不是函数模板的专用化
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.9\include\cub/thread/thread_load.cuh(293): error C2912: 显式专用化;“unsigned int cub::CUB_200802_SM_890::ThreadLoad<LOAD_CS,const unsigned int*>(const unsigned int *)”不是函数模板的专用化
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.9\include\cub/thread/thread_load.cuh(293): fatal error C1003: 错误计数超过 100;正在停止编译

使用原因为我编译c++推理脚本,使用的是tensorrt10,换到另一台电脑上发现运行报错。两台电脑都是win11。
因为代码在上一台机器可以运行,那肯定就不是代码问题,而环境配置也都修改完毕,相关库也没有缺失,所以怀疑可能是cuda版本问题,对比发现原cuda版本为12.4,新电脑为12.9
查看cuda版本可以运行

nvcc --version
# 或者
nvcc -V

在这里插入图片描述
卸载cuda12.9,删除文件夹:C:\Program Files\NVIDIA GPU Computing Toolkit
然后重装cuda12.4,再配置cudnn,重新配置tensorrt10
此时再运行程序,完美解决!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kao_lengmian

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值