C++11 standard with CUDA 6.0
c++, c++11, cuda, gcc, linux
Solution
The problem is CUDA 6.0 does not support the C++11 standard and when passing the `-std=c++11` option to the compiler then the compilation of the other source code will fail [especially when using third party .c files JSON, ...].
"Implement" a g++ hack in CUDA 6.0 Eclipse: Project -> Properties -> Build -> Settings -> Tool Settings -> Build Stages -> Compiler Path (-ccbin): Here you enter the path to the shell script described below [Example]: `/home/user/g++.hack`
The script in `/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 $*
Don't forget to run `chmod a+x /home/user/g++.hack`. Your C++11 Source code must have the extension .cpp - for all other extension the compiler option won't be passed.
I hope it can help until Nvidia officially supports C++11. For me it works and once Nvidia will officially support C++11 I can switch to a "normal" solution.
Note: With this you won't be able to use C++11 code in your CUDA source code but at least the host code can be developed in C++11!
Problem
I want to use the C++11 standard for my C++ files in my CUDA 6.0 project. When I change the compiler in the CUDA 6.0 Nsight Eclipse settings to the g++ and add the `-std=c++11` option then I receive lot of errors like this: ``` error: namespace "std::__gnu_cxx" has no member "__normal_iterator" ``` Apperantly I have to "select" the compiler once for CUDA and then for my C++ files. How can I do it? Installing CUDA 6.5 - which supports undocumented C++11 - is not an option.