有项目需要将代码部署到服务器中,代码在本地编译运行。
问题1:本地编译运行无论是Cpu还是Gpu版本调用都没有问题,移植到跳板机电脑上由于没有GPU,因此使用CPU运行,跳板机电脑运行正常。通过跳板机将程序拷贝到服务器后,发现只要一运行exe就直接闪退,也没有任何的打印输出。
问题1排查:
1、将所有业务代码注释,只保留main函数中的一个打印信息,结果发现代码仍然无法运行,确定不是业务代码导致的问题。
2、怀疑是不是onnxruntime的库有问题,因此更换onnx的版本,CPU、GPU仍旧无效。
问题解决:
多次询问AI后,怀疑是由于服务器基础环境不同导致在底层依赖上出现问题,排除因为32位还是64位系统问题,最终通过修改编译的链接库的方式解决,将配置属性-> C/C++ → 代码生成 → 运行库 修改为MT后问题解决,认为就是系统依赖不同导致的问题 。

1. 选择/MT(静态链接运行库):编译后 exe 会把 VC++ 运行库打包进自身,不依赖目标机器的任何运行库(推荐,彻底解决环境问题);
2. 若选/MD(动态链接):需确保目标机器安装对应版本的 VC++ 运行库(如 VS2022 对应 VC_redist.x64.exe)。**
问题2: 在解决完上面的问题后,程序的CPU版本已经可以正常运行,但GPU版本显示在调用onnxruntime_providers_cuda.dll库时无法加载。
2026-02-25 15:24:12:963 ERROR [Detection] CreateSession: D:\a\_work\1\s\onnxruntime\core\session\provider_bridge_ort.cc:1131 onnxruntime::ProviderLibrary::Get [ONNXRuntimeError] : 1 : FAIL : LoadLibrary failed with error 126 "" when trying to load "D:\test_cjy\onnxruntime_providers_cuda.dll"
问题2排查:
1、怀疑是onnxruntime库版本不匹配导致的问题,更换库版本后无法解决。
2、由于服务器中的nvidia-smi能查看到GPU信息,而nvcc -Version显示不识别的命令,因此认为是Cuda-toolkits未安装的问题,询问同事后认为不需要安装就可以运行,但是应该是要把相关的库给复制到同级目录下。
解决: 在服务器端查找与本地端类似的cuda依赖库,将其加入到exe同级目录下,,加入后就不断运行程序直到正常运行。最终确定共8个onnxruntime依赖:

也就是说如果调用onnxruntime_providers_cuda.dll需要加载上面的哪些cuda库,否则无法完成GPU调用。



1万+

被折叠的 条评论
为什么被折叠?



