0

我在编译具有 GPU 支持的 OpenCV 245 时遇到了很多麻烦。通过一些努力,我设法让 cuda 支持启动并运行,但现在我被困在 opencl 上,问题是:

在编译期间的某个时间点,会生成文件 kernels.cpp,其中包含所有内核函数作为字符串。据我了解,它们是使用 cl2cpp.cmake 脚本从 .cl 文件自动转换的。

我不明白的是从构建中排除了一个文件:在 Visual Studio 项目或 kernels.cpp 中不包括 nonfree_surf.cl (在我的磁盘上,与所有其他 .cl 文件一起)那是自动生成的。这会导致链接时出现未定义的错误。

我尝试将 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 脚本?如果是这样,如何?

4

1 回答 1

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 中,然后继续构建。

如果有人需要二进制文件,因为编译起来很麻烦,所以它们是:

使用 VS2010 x86 (WIN32) 编译的 Opencv 2.4.5 二进制文件,包括 ocl 和 gpu 库。

于 2013-05-30T12:19:47.490 回答