编译一个基于opencv的cuda工程时报错:
LNK2019 无法解析的外部符号 "void __cdecl cv::error(int,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,char const *,char const *,int)" (?error@cv@@YAXHAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@PEBD1H@Z),函数 "public: class cv::Size_<int> __cdecl cv::MatSize::operator()(void)const " (??RMatSize@cv@@QEBA?AV?$Size_@H@1@XZ) 中引用了该符号 5.1 F:\Cuda Projects\5.1\5.1\kernel.cu.obj 1
LNK2019 无法解析的外部符号 "class cv::debug_build_guard::_InputOutputArray const & __cdecl cv::noArray(void)" (?noArray@cv@@YAAEBV_InputOutputArray@debug_build_guard@1@XZ),函数 main 中引用了该符号 5.1 F:\Cuda Projects\5.1\5.1\kernel.cu.obj 1
LNK2019 无法解析的外部符号 "public: __cdecl cv::Mat::Mat(void)" (??0Mat@cv@@QEAA@XZ),函数 "public: __cdecl cv::MatExpr::operator class cv::Mat(void)const " (??BMatExpr@cv@@QEBA?AVMat@1@XZ) 中引用了该符号 5.1 F:\Cuda Projects\5.1\5.1\kernel.cu.obj 1
LNK2019 无法解析的外部符号 "public: __cdecl cv::Mat::~Mat(void)" (??1Mat@cv@@QEAA@XZ),函数 main 中引用了该符号 5.1 F:\Cuda Projects\5.1\5.1\kernel.cu.obj 1
......
找办法:错误解析:LNK2019: 无法解析的外部符号 "public: void __thiscall
找到原因:如果这个类是动态库中定义的类,可能是因为没有把这个动态库对应的.lib文件加到工程中。
解决办法:
右键【项目】-> 【属性】 -> 【VC++目录】
之前我在这里编辑了【包含目录】,加了两个头文件目录E:\opencv\opencv_4.5.4\build\include\opencv2;E:\opencv\opencv_4.5.4\build\include;
(这里以及之后的opencv路径取决于你的opencv安装路径,以下同),但是没有加【库目录】,现在点击【库目录】右边的倒三角按钮编辑加一下E:\opencv\opencv_4.5.4\build\x64\vc15\lib;
。
然后点击左边的【链接器】->【输入】,再选择右边的【附加依赖项】,增加opencv_world454d.lib;
(取决于你安装的opencv版本对应lib)。
点击应用确定,编译成功,OK!