C++11 在cmake中使用nvcc编译.cu
我有一个OpenCV C++脚本,我需要在里面使用CUADAMEMCPY。所以我在脚本中使用了cudamemcpy,并将文件保存为.cu,我使用的是cmake。因此,我添加了.cu作为cuda_可执行文件。但是当我使用“sudomake”时,我得到了以下错误 这是生成文件 所以在第27行中,我将c++0x更改为c++11,得到了相同的错误C++11 在cmake中使用nvcc编译.cu,c++11,cuda,cmake,nvcc,C++11,Cuda,Cmake,Nvcc,我有一个OpenCV C++脚本,我需要在里面使用CUADAMEMCPY。所以我在脚本中使用了cudamemcpy,并将文件保存为.cu,我使用的是cmake。因此,我添加了.cu作为cuda_可执行文件。但是当我使用“sudomake”时,我得到了以下错误 这是生成文件 所以在第27行中,我将c++0x更改为c++11,得到了相同的错误 所以我尝试了gnu++11,但仍然有相同的错误。问题是-std=c++11如果通过add_definitions()传递,则不会添加到nvcc构建命令中。
所以我尝试了gnu++11,但仍然有相同的错误。问题是
-std=c++11
如果通过add_definitions()
传递,则不会添加到nvcc
构建命令中。从:
通过-D或/D传递到add_定义中的标志将传递给nvcc
其他选项如-std=c++11
不会传递给nvcc
通过将c++11
添加到CUDA\u NVCC\u标志中,可以全局启用c++11
set(CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS} -std=c++11" )
或者在每个目标级别上使用
cuda_add_executable(opencv opencv.cu OPTIONS -std=c++11)
正如Talonmes在评论中指出的那样:如果您只需要运行时API中的函数,比如cudaMemcpy()
,那么您可以在普通的C++文件中使用它们(不需要.cu扩展名)。然后,您需要包括cuda_runtime_api.h
并链接到cuda运行库cudart
。(确保cuda包含目录位于包含路径上,库位于库路径中,如果使用nvcc
进行编译,则会自动处理该目录。)
更新
< >对于CKED的最新版本设置C++标准的正确方法在这里解释如下:< P>问题是,如果代码通过<代码> AddioDealixStices()/<代码>传递,则<代码> -STD= C++ 11 不添加到NVCC
通过-D或/D传递到add_定义中的标志将传递给nvcc
其他选项如-std=c++11
不会传递给nvcc
通过将c++11
添加到CUDA\u NVCC\u标志中,可以全局启用c++11
set(CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS} -std=c++11" )
或者在每个目标级别上使用
cuda_add_executable(opencv opencv.cu OPTIONS -std=c++11)
正如Talonmes在评论中指出的那样:如果您只需要运行时API中的函数,比如cudaMemcpy()
,那么您可以在普通的C++文件中使用它们(不需要.cu扩展名)。然后,您需要包括cuda_runtime_api.h
并链接到cuda运行库cudart
。(确保cuda包含目录位于包含路径上,库位于库路径中,如果使用nvcc
进行编译,则会自动处理该目录。)
更新
< >对于CMAGE的最新版本设置C++标准的正确方法在这里解释:如果您所做的是从运行时API调用函数,则不需要为源使用.Cu扩展。另外,请不要将错误文本和代码作为图像发布。搜索不适用于图像这一代工程师从来不知道拨号调制解调器。如果您所做的只是从运行时API调用函数,则不需要对源代码使用.cu扩展名。另外,请不要将错误文本和代码作为图像发布。搜索无法处理图像他们这一代工程师从来不知道拨号调制解调器。