我在编译CUDA SDK附带的一些示例时遇到了麻烦.我已经安装了开发人员驱动程序(版本270.41.19)和CUDA工具包,最后是SDK(两者都是4.0.17版本).
最初它根本没有编译:
error -- unsupported GNU version! gcc 4.5 and up are not supported!
Run Code Online (Sandbox Code Playgroud)
我发现81行负责:/usr/local/cuda/include/host_config.h并将其更改为:
//#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ > 4)
#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ > 6)
Run Code Online (Sandbox Code Playgroud)
从那时起,我只得到了一些编译的例子,它停止了:
In file included from /usr/include/c++/4.6/x86_64-linux-gnu/bits/gthr.h:162:0,
from /usr/include/c++/4.6/ext/atomicity.h:34,
from /usr/include/c++/4.6/bits/ios_base.h:41,
from /usr/include/c++/4.6/ios:43,
from /usr/include/c++/4.6/ostream:40,
from /usr/include/c++/4.6/iterator:64,
from /usr/local/cuda/include/thrust/iterator/iterator_categories.h:38,
from /usr/local/cuda/include/thrust/device_ptr.h:26,
from /usr/local/cuda/include/thrust/device_malloc_allocator.h:27,
from /usr/local/cuda/include/thrust/device_vector.h:26,
from lineOfSight.cu:37:
/usr/include/c++/4.6/x86_64-linux-gnu/bits/gthr-default.h:251:1: error: pasting "__gthrw_" and "/* Android's C library does not provide pthread_cancel, check for
`pthread_create' instead. */" does not give a valid preprocessing token
make[1]: *** [obj/x86_64/release/lineOfSight.cu.o] Error 1
Run Code Online (Sandbox Code Playgroud)
正如一些示例编译我认为这不是驱动程序问题,而是必须与不受支持的gcc版本有关.降级不是一种选择,因为gcc4.6此时将整个系统作为依赖...
Gea*_*phy 102
正如已经指出的那样,nvcc依赖于gcc 4.4.通过将软链接添加到使用nvcc install创建的bin目录,可以将nvcc配置为使用正确版本的gcc而不传递任何编译器参数.
默认的cuda二进制目录(安装默认值)是/ usr/local/cuda/bin,从这个目录添加到正确版本的gcc的软链接就足够了:
sudo ln -s /usr/bin/gcc-4.4 /usr/local/cuda/bin/gcc
tal*_*ies 50
CUDA不支持gcc 4.5和4.6 - 代码将无法编译,其他工具链(包括cuda-gdb)将无法正常工作.您不能使用它们,并且限制是不可协商的.
您唯一的解决方案是安装gcc 4.4版本作为第二个编译器(大多数发行版都允许).nvcc有一个选项--compiler-bindir
,可用于指向备用编译器.创建一个本地目录,然后创建指向支持的gcc版本可执行文件的符号链接.通过该--compiler-bindir
选项将该本地目录传递给nvcc ,您应该能够编译CUDA代码而不会影响系统的其余部分.
编辑:
请注意,这个问题和答案与CUDA 4有关.自编写以来,NVIDIA在更新的CUDA工具链发布中继续扩展对后来gcc版本的支持
目前(截至CUDA 10)在CUDA中没有gcc 8支持.
请注意,NVIDIA最近在此处添加了一个非常有用的表,其中包含当前CUDA版本支持的编译器和OS矩阵.
bry*_*410 35
更新:
对于CUDA 9:
MAX_GCC_VERSION=8
Run Code Online (Sandbox Code Playgroud)
您需要先安装gcc和g ++ 6:
sudo apt install gcc-$MAX_GCC_VERSION g++-$MAX_GCC_VERSION
Run Code Online (Sandbox Code Playgroud)
老答案:
对于CUDA 8:
sudo ln -s /usr/bin/gcc-$MAX_GCC_VERSION /usr/local/cuda/bin/gcc
sudo ln -s /usr/bin/g++-$MAX_GCC_VERSION /usr/local/cuda/bin/g++
Run Code Online (Sandbox Code Playgroud)
您需要先安装gcc和g ++ 5:
MAX_GCC_VERSION=8
Run Code Online (Sandbox Code Playgroud)
Nic*_*rca 24
Gearoid Murphy的解决方案对我来说效果更好,因为在我的发行版(Ubuntu 11.10)上,gcc-4.4和gcc-4.6在同一个目录中,所以--compiler-bindir没有帮助.唯一需要注意的是我还必须安装g ++ - 4.4和symlink它:
sudo ln -s /usr/bin/gcc-4.4 /usr/local/cuda/bin/gcc
sudo ln -s /usr/bin/g++-4.4 /usr/local/cuda/bin/g++
Run Code Online (Sandbox Code Playgroud)
neo*_*hur 11
对于CUDA7.5,这些线路工作:
sudo ln -s /usr/bin/gcc-4.9 /usr/local/cuda/bin/gcc
sudo ln -s /usr/bin/g++-4.9 /usr/local/cuda/bin/g++
Run Code Online (Sandbox Code Playgroud)
了解如何使用"update-alternatives"来解决此问题:
...如果您安装gcc 4.6,您还可以使用update-alternatives命令以便在版本之间轻松切换.这可以配置:
Run Code Online (Sandbox Code Playgroud)sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.6 60 --slave /usr/bin/g++ g++ /usr/bin/g++-4.6 sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.7 40 --slave /usr/bin/g++ g++ /usr/bin/g++-4.7 sudo update-alternatives --config gcc
在大多数发行版中,您可以在最新的编译器(如gcc-4.7)旁边安装另一个gcc和g ++版本.此外,大多数构建系统都知道CC
和CXX
环境变量,它们分别指定了其他C和C++编译器.所以我建议像:
CC=gcc-4.4 CXX=g++-4.4 cmake path/to/your/CMakeLists.txt
Run Code Online (Sandbox Code Playgroud)
对于Makefile,应该有类似的方式.我不建议在/ usr/local中设置自定义符号链接,除非您知道自己在做什么.
如果cmake
对我来说,编辑文件和链接的技巧都无效,那么我使用指定gcc / g ++版本的标志进行编译。
cmake -DCMAKE_C_COMPILER=gcc-6 -DCMAKE_CXX_COMPILER=g++-6 ..
像魅力一样工作。
归档时间: |
|
查看次数: |
111760 次 |
最近记录: |