【发布时间】:2015-01-16 18:08:45
【问题描述】:
我最近下载了 CUDA 7 并将其设置为与我的项目一起使用。在 Mac 上,CUDA 7 需要 clang 作为宿主编译器。
现在,我正在使用许多 C++11 功能。我已经通过传递给 nvcc 的 -std=c++11 启用了这些功能。但是,如果我将 -Xcompiler -std=c++11 传递给 nvcc,无论我是否也单独传递了 -std=c++11,我都会收到以下错误。错误是:
“'C/ObjC' 不允许使用无效参数 '-std=c++11'”
看起来这应该可行,它当然适用于 GCC。任何人都有解决方法。否则,我将向 Nvidia 提交错误报告。
【问题讨论】:
-
在 6.5/gcc 中也不适用于我 - 我猜 CUDA 会根据您编写的内容生成 C 代码。为什么你认为你需要
-Xcompiler? CUDA7 发行说明中的示例说使用--std=c++11,这就足够了。 -
有趣!它确实适用于 6.5 和 GCC,但不知道为什么会有所不同。出现问题是因为我将 -std=c++11 指定为主机标志,并且 FindCUDA.cmake 自动将其作为 -Xcompiler -std=c++11 转发给 nvcc。 (我需要它作为主机标志,因为我的主机文件。)
-
所以如果你只指定
-std=c++11而不手动指定-Xcompiler(没有cmake 或其他任何东西,只指定nvcc),它编译得好吗? -
是的!如果我将 -std=c++11 分别指定给 nvcc 和主机编译器,那就完美了。
-
@user2333829 这是否表明问题在于 CMake 构建了不正确的编译器调用,而不是 CUDA 软件堆栈的任何组件的问题?