存在报错:
main.obj:-1: error: LNK2019: 无法解析的外部符号 OrtGetApiBase,函数 "void __cdecl `dynamic initializer for 'public: static struct OrtApi const * const Ort::Global<void>::api_''(void)" (??__E?api_@?$Global@X@Ort@@2PEBUOrtApi@@EB@@YAXXZ) 中引用了该符号
感觉像是lib文件没搞好,但是por中写了
LIBS+= D:\software\opencv_cpp\opencv4.10_one_file\lib\Release\opencv_world4100.lib
D:\software\opencv_cpp\opencv4.10_one_file\lib\Release\opencv_img_hash4100.lib
D:\software\opencv_cpp\opencv4.10_one_file\lib\Release\opencv_ts4100.lib
D:\onnx\onnxruntime-win-x64-gpu-1.20.0\lib\onnxruntime.lib
D:\onnx\onnxruntime-win-x64-gpu-1.20.0\lib\onnxruntime_providers_cuda.lib
D:\onnx\onnxruntime-win-x64-gpu-1.20.0\lib\onnxruntime_providers_shared.lib
D:\onnx\onnxruntime-win-x64-gpu-1.20.0\lib\onnxruntime_providers_tensorrt.lib
改为
LIBS += -LD:\onnx\onnxruntime-win-x64-gpu-1.20.0\lib \
-lonnxruntime \
-lonnxruntime_providers_cuda \
-lonnxruntime_providers_shared \
-lonnxruntime_providers_tensorrt
# OpenCV 配置(保持原有配置)
LIBS += D:\software\opencv_cpp\opencv4.10_one_file\lib\Release\opencv_world4100.lib \
D:\software\opencv_cpp\opencv4.10_one_file\lib\Release\opencv_img_hash4100.lib \
D:\software\opencv_cpp\opencv4.10_one_file\lib\Release\opencv_ts4100.lib
运行成功
建议还是用-L方式吧,ai的回答是:
库文件的依赖关系
ONNX Runtime 是一个复杂的库,onnxruntime.lib 本身可能依赖于同一目录下的其他库(如 onnxruntime_providers_cuda.lib)。当你使用完整路径直接引用 onnxruntime.lib 时,链接器虽然找到了主库,但无法自动定位其依赖库的位置,导致部分符号(如 OrtGetApiBase)无法解析。
而 -L 选项明确告诉链接器:“所有相关库都在这个目录下”,链接器会在该路径下递归查找所有依赖项,确保所有符号都能被正确解析。
Qt 对 -L 和 -l 的优化
Qt 的 .pro 文件在处理 -L 和 -l 选项时,会进行额外的预处理:
-L路径会被添加到链接器的搜索路径列表中。-l选项会根据平台自动转换为正确的库文件名(如 Windows 下的onnxruntime.lib)。
这种预处理可能更符合 ONNX Runtime 库的内部结构,从而避免了直接路径引用时可能出现的问题。

236

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



