我想在 CUDA 6.0 项目中对 C++ 文件使用 C++11 标准。
当我将 CUDA 6.0 Nsight Eclipse 设置中的编译器更改为 g++ 并添加-std=c++11
选项然后我收到很多这样的错误:
error: namespace "std::__gnu_cxx" has no member "__normal_iterator"
显然我必须为 CUDA“选择”编译器一次,然后为我的 C++ 文件“选择”编译器。
我该怎么做?安装 CUDA 6.5(支持未记录的 C++11)不是一个选项。
问题是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 $*
别忘了奔跑chmod a+x /home/user/g++.hack
。您的 C++11 源代码必须具有扩展名 .cpp - 对于所有其他扩展名,编译器选项将不会被传递。
希望在 Nvidia 正式支持 C++11 之前它能有所帮助。对我来说它有效,一旦 Nvidia 正式支持 C++11,我就可以切换到“正常”解决方案。
Note:这样,您将无法在 CUDA 源代码中使用 C++11 代码,但至少可以使用 C++11 开发主机代码!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)