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!