我有一个opencv c ++脚本,我需要在其中使用cudamemcpy。所以我在我的脚本中使用了cudamemcpy并将文件保存为.cu我正在使用cmake。所以我添加了.cu作为cuda_executable。但是当我使用" sudo make"我收到以下错误
所以在第27行我改变了c ++ 0x到c ++ 11,我得到了同样的错误 所以我尝试了gnu ++ 11,但我仍然有同样的错误。
答案 0 :(得分:5)
问题是-std=c++11
如果通过nvcc
传递,则add_definitions()
未添加到-std=c++11
构建命令。来自FindCUDA cmake documentation:
使用-D或/ D传递到add_definitions的标志将传递给nvcc。
nvcc
等其他选项不会传递给c++11
。
您可以通过将CUDA_NVCC_FLAGS
添加到set(CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS} -std=c++11" )
cuda_add_executable(opencv opencv.cu OPTIONS -std=c++11)
cudaMemcpy()
或使用
在每个目标级别上cuda_runtime_api.h
正如talonmies在评论中指出的那样:如果您只需要运行时API中的函数,例如cudart
,您可以在普通的C ++文件中使用它们(不需要.cu扩展名)。然后,您需要包含nvcc
并链接到cuda运行时库icon.png
。 (确保cuda include目录位于include-path和库路径中的库中,如果使用from Tkinter import *
root = Tk()
icon = PhotoImage(file='icon.png')
root.tk.call('wm', 'iconphoto', root._w, icon)
root.mainloop()
进行编译,则会自动处理。)
此处解释了为更新版本的CMake设置c ++标准的正确方法:Triggering C++11 support in NVCC with CMake