118 votes

CUDA incompatible avec ma version gcc

J'ai des problèmes de compilation de certains des exemples livrés avec CUDA SDK. J'ai installé les développeurs pilote (version 270.41.19) et le CUDA toolkit, puis, enfin, le SDK (à la fois le 4.0.17 version).

Au départ, il n'a pas de compilation à tout donner:

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

J'ai trouvé la ligne de responsable dans le 81:/usr/local/cuda/include/host_config.h et cela a changé:

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

à partir de ce moment j'ai que quelques exemples pour compiler, il s'arrête avec:

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

Comme certains exemples de compiler je recon ce n'est pas un problème de pilote, doit plutôt avoir qqch à faire avec non pris en charge la version de gcc. Le déclassement n'est pas une option, car gcc4.6 a tout un système comme une dépendance à ce point...

132voto

Gearoid Murphy Points 4181

Comme déjà indiqué, nvcc dépend de gcc 4.4. Il est possible de configurer nvcc pour utiliser la version correcte de gcc sans transmettre de paramètres de compilateur en ajoutant des liens souples au répertoire bin créé avec l’installation de nvcc.

Le répertoire binaire cuda par défaut (celui par défaut de l'installation) est / usr / local / cuda / bin, l'ajout d'un lien symbolique à la version correcte de gcc à partir de ce répertoire suffit:

sudo ln -s /usr/bin/gcc-4.4 /usr/local/cuda/bin/gcc

63voto

talonmies Points 41460

gcc 4.5 et 4.6 ne sont pas pris en charge avec CUDA - code ne compile pas et le reste de la suite d'outils, y compris cuda-gdb, ne fonctionnent pas correctement. Vous ne pouvez pas les utiliser, et la restriction est non-négociable.

Votre seule solution est d'installer gcc 4.4 version comme une seconde compilateur (la plupart des distributions permet). Il y a une option pour nvcc --compiler-bindir qui peut être utilisé pour pointer vers un autre compilateur. Créer un répertoire local et de créer des liens symboliques vers les prises en charge la version de gcc exécutables. Passer ce répertoire local à nvcc via l' --compiler-bindir option, et vous devriez être capable de compiler du code CUDA, sans affecter le reste de votre système.


EDIT: Comme le CUDA version 4.1, gcc 4.5 est maintenant pris en charge. gcc 4.6 et 4.7 sont pas pris en charge. EDIT: Comme le CUDA 5.0 libération, gcc 4.6 est maintenant pris en charge. gcc 4.7 sont pas pris en charge.

25voto

SchighSchagh Points 3025

La solution de Gearoid Murphy fonctionne mieux pour moi car sur ma distribution (Ubuntu 11.10), gcc-4.4 et gcc-4.6 se trouvent dans le même répertoire, donc --compiler-bindir n'est d'aucune aide. Le seul inconvénient est que je devais aussi installer g ++ - 4.4 et le lier symboliquement aussi:

 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++
 

2voto

aauser Points 233

La solution de Gearoid Murphy fonctionne à merveille. Pour moi, j'avais deux répertoires pour cuda -

 /usr/local/cuda 
/usr/local/cuda-5.0
 

Les liens symboliques devaient être ajoutés uniquement au répertoire mentionné ci-dessous -

 /usr/local/cuda 
 

En outre, les liens dynamiques g ++ et gcc étaient nécessaires, comme l'a mentionné SchighSchagh.

2voto

42n4 Points 440

CUDA est après quelques modifications d'en-tête compatibles avec gcc4.7 et peut-être une version supérieure: https://www.udacity.com/wiki/cs344/troubleshoot_gcc47

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X