【问题标题】:Compiling .cu using nvcc in cmake在 cmake 中使用 nvcc 编译 .cu
【发布时间】:2016-04-29 21:16:20
【问题描述】:

我有一个 opencv c++ 脚本,我需要在其中使用 cudamemcpy。所以我在我的脚本中使用了 cudamemcpy 并将文件保存为 .cu 我正在使用 cmake。所以我将 .cu 添加为 cuda_executable。但是当我使用“sudo make”时,出现以下错误

这是生成文件

所以在第 27 行中,我将 c++0x 更改为 c++11,我得到了同样的错误 所以我尝试了 gnu++11 但我仍然有同样的错误。

【问题讨论】:

  • 如果您所做的只是从运行时 API 调用函数,则无需为源代码使用 .cu 扩展名。另外,请不要将错误文本和代码发布为图像。搜索不适用于图片
  • 有一代工程师不知道拨号调制解调器。

标签: c++11 cuda cmake nvcc


【解决方案1】:

问题是-std=c++11 如果通过add_definitions() 传递,则不会添加到nvcc 构建命令中。来自FindCUDA cmake documentation

使用 -D 或 /D 传递给 add_definitions 的标志将传递给 nvcc。

-std=c++11 等其他选项不会传递给 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)

正如 talonmies 在评论中指出的那样:如果您只需要运行时 API 中的函数,例如 cudaMemcpy(),您可以在普通 C++ 文件中使用它们(不需要 .cu 扩展名)。然后,您需要包含cuda_runtime_api.h 并链接到cuda 运行时库cudart。 (确保 cuda 包含目录在您的包含路径中,并且库在您的库路径中,如果您使用 nvcc 编译,则会自动处理。)


更新

这里解释了为更新版本的 CMake 设置 c++ 标准的正确方法:Triggering C++11 support in NVCC with CMake

【讨论】:

    猜你喜欢
    • 2018-02-02
    • 2020-02-05
    • 2014-11-29
    • 2021-12-19
    • 2023-03-23
    • 1970-01-01
    • 2015-01-30
    • 2019-04-14
    • 1970-01-01
    相关资源
    最近更新 更多