带有CUDA 6.0的C++ 11标准

Al *_*ndy 6 c++ linux gcc cuda c++11

我想在CUDA 6.0项目中使用C++ 11标准来处理我的C++文件.当我将CUDA 6.0 Nsight Eclipse设置中的编译器更改为g ++并添加-std=c++11选项时,我收到很多错误,如下所示:

error: namespace "std::__gnu_cxx" has no member "__normal_iterator"
Run Code Online (Sandbox Code Playgroud)

显然我必须为CUDA选择一次编译器,然后为我的C++文件选择.

我该怎么做?安装CUDA 6.5(支持未记录的C++ 11)不是一种选择.

Al *_*ndy 8

问题是CUDA 6.0不支持C++ 11标准,当将-std=c++11选项传递给编译器时,其他源代码的编译将失败[尤其是当使用第三方.c文件JSON,...]时.

在CUDA 6.0 Eclipse中"实现"g ++ hack:项目 - >属性 - >构建 - >设置 - >工具设置 - >构建阶段 - >编译器路径(-ccbin):在此输入下面描述的shell脚本的路径[例]: /home/user/g++.hack

脚本在/home/user/g++.hack:

# g++ Hack
#

# in CUDA 6.0 the source code is always the last parameter
SourceFile="${@: -1}"

# get the file extension
Extension=${SourceFile##*.}

if [ "$Extension" == "cpp" ]
then
   StdFlag="-std=c++11"
else
   StdFlag=""
fi

# run now the g++ 4.9 in your own path with the personalized std option
/usr/local/bin/g++ $StdFlag $*
Run Code Online (Sandbox Code Playgroud)

别忘了跑chmod a+x /home/user/g++.hack.您的C++ 11源代码必须具有扩展名.cpp - 对于所有其他扩展,不会传递编译器选项.

我希望它可以帮助,直到Nvidia正式支持C++ 11.对我来说这很有效,一旦Nvidia正式支持C++ 11,我就可以切换到"正常"的解决方案.

注意:使用此功能,您将无法在CUDA源代码中使用C++ 11代码,但至少可以使用C++ 11开发主机代码!