在使用GPU支持编译OpenCV 245时遇到了很多麻烦。通过一些努力,我设法让cuda支持并运行,但现在我被困在opencl上,这就是问题所在:
在编译期间的某个时刻,生成文件kernels.cpp,其中包含所有内核函数作为字符串。据我所知,它们是使用cl2cpp.cmake脚本从.cl文件自动转换的。
我不明白的是,一个文件被排除在构建之外:nonfree_surf.cl(在我的磁盘上,与所有其他.cl文件一起)不包含在visual studio项目中,或者在kernels.cpp中自动生成。这会在链接时导致未定义的错误。
我尝试手动将nonfree_surf.cl添加到visual studio项目中。这不会改变任何事情。在ocl模块的CMakeLists.txt中,所有cl文件似乎都会自动添加到该行:
file(GLOB CL_FILES "${CMAKE_CURRENT_SOURCE_DIR}/src/kernels/*.cl")
我尝试手动将nonfree_surf添加到CL_FILES,但没有效果。
我对CMake知之甚少,因此我不太了解发生了什么。有人能告诉我如何找到这种行为的原因,即:
为什么所有的.cl文件都添加到我的VS项目中,除了nonfree_surf.cl?
我该如何纠正?
也许我可以手动执行cl2cpp.cmake脚本?如果是这样,怎么样?
答案 0 :(得分:0)
通过手动运行脚本来管理它:
cmake -DOUTPUT_PATH=c:/opencv/kernels2.cpp -DCL_DIR:PATH=c:/opencv/modules/ocl/src/kernels -P "c:\opencv\modules\ocl\cl2cpp.cmake"
由于某种原因(可能与使nonfree_surf不被处理的原因相同),并非每个必需的函数都以这种方式处理,因此我将nonfree_surf字符串复制粘贴到kernels.cpp中,然后继续构建。
如果有人需要二进制文件,因为它们很难编译,所以它们是:
Opencv 2.4.5 binaries compiled with VS2010 x86 (WIN32) including ocl and gpu library.