CUDA与我的gcc版本不兼容

我在编译CUDA SDK附带的一些示例时遇到了麻烦。我已经安装了开发人员驱动程序(版本270.41.19)和CUDA工具包,最后安装了SDK(均为4.0.17版本)。


最初,它根本没有编译:


error -- unsupported GNU version! gcc 4.5 and up are not supported!

我在81:/usr/local/cuda/include/host_config.h中找到负责的行,并将其更改为:


//#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ > 4)

#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ > 6)

从那时起,我只编译了几个示例,其结尾为:


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

作为一些示例编译,我认为这不是驱动程序问题,而是与不支持的gcc版本有关。降级不是一种选择,因为此时gcc4.6将整个系统作为依赖项...


慕哥6287543
浏览 2666回答 3
3回答

收到一只叮咚

如前所述,nvcc取决于gcc 4.4。通过将软链接添加到使用nvcc安装创建的bin目录中,可以将nvcc配置为使用正确版本的gcc,而不传递任何编译器参数。默认的cuda二进制目录(安装默认)是/ usr / local / cuda / bin,从该目录向正确的gcc版本添加软链接就足够了:sudo ln -s /usr/bin/gcc-4.4 /usr/local/cuda/bin/gcc

繁花如伊

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 4.1版本开始,现在支持gcc 4.5。不支持gcc 4.6和4.7。从CUDA 5.0版本开始,现在支持gcc 4.6。不支持gcc 4.7。从CUDA 6.0版本开始,现在支持gcc 4.7。从CUDA 7.0版本开始,完全支持gcc 4.8,而在Ubuntu 14.04和Fedora 21上则有4.9支持。从CUDA 7.5版本开始,完全支持gcc 4.8,在Ubuntu 14.04和Fedora 21上有4.9支持。从CUDA 8版本开始,Ubuntu 16.06和Fedora 23完全支持gcc 5.3。从CUDA 9版本开始,在Ubuntu 16.04,Ubuntu 17.04和Fedora 25上完全支持gcc 6。CUDA 9.2版本增加了对gcc 7的支持CUDA 10.1版本增加了对gcc 8的支持当前(从CUDA 10.1开始)在CUDA中不支持gcc 9。请注意,NVIDIA最近在这里添加了一个非常有用的表,其中包含当前CUDA版本支持的编译器和OS矩阵。

智慧大石

检查您的CUDA版本支持的最大GCC版本。对于CUDA 10.1,10.2:8对于CUDA 9.2,10.0:7对于CUDA 9.0,9.1:6对于CUDA 8:5为该GCC版本设置环境变量。例如,对于CUDA 10.2:MAX_GCC_VERSION=8确保已安装该版本:sudo apt install gcc-$MAX_GCC_VERSION g++-$MAX_GCC_VERSION在CUDA文件夹中添加符号链接: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++
打开App,查看更多内容
随时随地看视频慕课网APP