我正在尝试使用 Visual Studio 2012 构建这个示例 opencv 应用程序:
https://github.com/Itseez/opencv/blob/2.4/samples/ocl/surf_matcher.cpp
为此,我下载并安装了 opencv 2.4.6 并将其安装在我的系统上。
配置 Visual Studio 2012 以使用它(设置包含路径、库路径和库)
我检查并将 opencv\build\x86\vc11\staticlib 中的所有库添加到我的应用程序(我注意调试库已添加到调试构建和发布库以发布构建)。
我正在编译代码,我收到几个链接错误:
Error 1 error LNK2019: unresolved external symbol "public: __thiscall cv::ocl::SURF_OCL::SURF_OCL(double,int,int,bool,float,bool)" (??0SURF_OCL@ocl@cv@@QAE@NHH_NM0@Z) referenced in function "public: __thiscall `anonymous namespace'::SURFDetector<class cv::ocl::SURF_OCL>::SURFDetector<class cv::ocl::SURF_OCL>(double)" (??0?$SURFDetector@VSURF_OCL@ocl@cv@@@?A0x1f01e08d@@QAE@N@Z)
Error 7 error LNK2001: unresolved external symbol _clReleaseMemObject@4 ConsoleApplication1\opencv_ocl246d.lib(arithm.obj)
其中有几个,它们似乎都与 ocl 库有关。
我应该添加哪个其他库才能使 OCL 正常工作?
笔记:
当我尝试编译时,出现以下错误:
'getDeviceInfo' : is not a member of 'cv::ocl::Context'
在这段代码上:
if(!useCPU)
{
std::cout
<< "Device name:"
<< cv::ocl::Context::getContext()->getDeviceInfo().deviceName
<< std::endl;
}
这个错误似乎与周围的不同 ocl.hpp 有关。我使用了 github 版本(有关详细信息,请参阅答案),并在更改所需的标头后,编译错误已解决。