C++11 CUDA 7.0,无效参数'-std=c++;11';不允许使用';C/ObjC';

C++11 CUDA 7.0,无效参数'-std=c++;11';不允许使用';C/ObjC';,c++11,cuda,clang,C++11,Cuda,Clang,我最近下载了CUDA 7,并将其设置为与我的项目一起工作。在Mac上,CUDA7需要clang作为主机编译器 现在,我正在使用一些C++11特性。我已经通过将-std=c++11传递给nvcc启用了这些功能。但是,如果我将-Xcompiler-std=c++11传递给nvcc,那么不管我自己是否也传递了-std=c++11,我都会得到以下错误。错误是: “无效参数'-std=c++11'不允许与'c/ObjC'一起使用” 看起来这应该行得通,GCC肯定行得通。任何人都有解决办法。否则,我将向Nv

我最近下载了CUDA 7,并将其设置为与我的项目一起工作。在Mac上,CUDA7需要clang作为主机编译器

现在,我正在使用一些C++11特性。我已经通过将-std=c++11传递给nvcc启用了这些功能。但是,如果我将-Xcompiler-std=c++11传递给nvcc,那么不管我自己是否也传递了-std=c++11,我都会得到以下错误。错误是:

“无效参数'-std=c++11'不允许与'c/ObjC'一起使用”


看起来这应该行得通,GCC肯定行得通。任何人都有解决办法。否则,我将向Nvidia提交一份错误报告。

当然它不起作用。在使用C或ObjtoE-C编译器时,您指定C++选项。源文件必须是C++或ObjuleC++。p>
nvcc-dryrun…
将显示将执行的命令。我目前没有访问CUDA7的权限,只有6.5版本,但我的问题之一是,编译生成的C源代码的两个命令。该代码由代码> CUUFAF生成,必须由C编译器编译,但<代码> -Xcompiler < /C> >同时添加C和C++模式的选项。
我猜我的gcc情况的不同之处在于,当您出现错误时,我会收到一个警告(这正是gcc和clang在这种情况下的不同之处)。对于这两个编译器,我看不到任何抑制它的方法,因此我想您必须修复
.cmake
文件以忽略
-Xcompiler
选项。这个选项不应该用于语言标准,只是一些非常特定于编译器的东西。

我认为这一点都不清楚!CUDA是一种C++语言。我的源文件是C++。主机代码,也就是C++,用主机编译器处理(在这种情况下,CLAN)。当我不指定-Xcompiler-std=c++11标志,而只指定-std=c++11标志时,它可以很好地编译。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
),它可以编译好吗?是的!如果我分别为nvcc和主机编译器指定-std=c++11,事情就完美无缺了。@user2333829这不表明问题出在CMake构造错误的编译器调用上,而不是CUDA软件堆栈的任何组件上吗?