2016-01-23 482 views
0

我有一个opencv C++脚本,我需要在其中使用cudamemcpy。所以我在我的脚本中使用了cudamemcpy并将该文件保存为.cu我正在使用cmake。所以我将.cu添加为cuda_executable。但是,当我用“命令使”我收到以下错误在cmake中使用nvcc编译.cu

error I get

是Makefile cmakelists.txt

因此,在第27行,我改变的C++ 0x到C++ 11和我同样的错误 所以我试过gnu ++ 11但我仍然有同样的错误。

+2

您不需要使用.cu扩展名源代码如果你只是从运行时API调用函数。另外,请不要将错误文本和代码作为图像发布。搜索不适用于图像 – talonmies

+1

有一代从来不知道拨号调制解调器的工程师。 – Drop

回答

3

问题是,-std=c++11未被添加到nvcc构建命令,如果它通过add_definitions()传递。从FindCUDA cmake documentation

标记传递到add_definitions与-D或/ D传递给nvcc。

其他选项如-std=c++11不会传递给nvcc

您可以通过它与

cuda_add_executable(opencv opencv.cu OPTIONS -std=c++11) 

增加了CUDA_NVCC_FLAGS

set(CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS} -std=c++11") 

或每个目标水平talonmies使c++11在全球范围内的评论指出:如果只有你需要运行时API的功能,如cudaMemcpy(),你可以在普通的C++文件中使用它们(不需要.cu扩展名)。然后,您需要包含cuda_runtime_api.h并链接到cuda运行时库cudart。 (确保cuda include目录位于include路径中,并且存储库位于库路径中,如果使用nvcc进行编译,将自动处理这个库。)