CUDA, gcc sürümümle uyumsuz


105

CUDA SDK ile birlikte gönderilen bazı örnekleri derlemekte sorun yaşıyorum. Geliştiriciler sürücüsünü (sürüm 270.41.19) ve CUDA araç setini, ardından son olarak SDK'yı (her ikisi de 4.0.17 sürümü) yükledim.

Başlangıçta hiç derlemedi:

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

81: /usr/local/cuda/include/host_config.h dosyasında sorumlu satırı buldum ve şu şekilde değiştirdim:

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

o noktadan sonra derleyeceğim örneklerden sadece birkaçına sahip oldum, şu şekilde bitiyor:

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

Bazı örneklerin derlendiğine göre, bunun bir sürücü sorunu olmadığını, daha çok desteklenmeyen bir gcc sürümüyle ilgisi olması gerektiğini düşünüyorum. Gcc4.6 bu noktada bağımlılık olarak bütün bir sisteme sahip olduğundan, sürüm düşürmek bir seçenek değildir ...


4
Gelecekteki okuyucular için: CUDA'nın en son sürümünü kullandığınızdan emin olun (kesinlikle ilkini kullanmak zorunda olmadığınız sürece). NVIDIA, neredeyse her sürümde desteklenen maksimum derleyici sürümünü yükseltir.
einpoklum

Bu, CUDA 10'a sahip olanlar ve çok yüksek bir gnu derleyici zinciri sürümü hatasını alanlar için yararlı olabilir: stackoverflow.com/questions/53344283/…
Douglas Daseeco

Yanıtlar:


119

Daha önce de belirtildiği gibi nvcc, gcc 4.4'e bağlıdır. Nvcc kurulumuyla oluşturulan bin dizinine yumuşak bağlantılar ekleyerek herhangi bir derleyici parametresini iletmeden nvcc'yi doğru gcc sürümünü kullanacak şekilde yapılandırmak mümkündür.

Varsayılan cuda ikili dizini (kurulum varsayılanı) / usr / local / cuda / bin'dir, bu dizinden gcc'nin doğru sürümüne bir yazılım bağlantısı eklemek yeterlidir:

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


2
"güncelleme alternatifleri" komutu da yardımcı olabilir, özellikle CUDA 5.0 yüklenirken
phoad

4
Ayrıca doğru g ++ sürümüne sembolik bir bağlantı eklemem gerekiyordu.
Auron

17
Ayrıca g ++ ile bağlantı kurmam gerekiyordu. Aksi takdirde, basit nvccinvokasyonlar çalışır, ancak söylemek uygulayarak makeCUDA Örnekleri, yakında başlayarak çağrılardan getiriyor: nvcc -ccbin g++. Benim için sudo ln -s /usr/bin/gcc-4.9 /usr/local/cuda/bin/gccve kullandım sudo ln -s /usr/bin/g++-4.9 /usr/local/cuda/bin/g++.
user2023370

8
İle Eğer derleme cmake .. && makeyapabilirsiniz deneyin cmake -D CUDA_NVCC_FLAGS="-ccbin gcc-4.4" .. && make . Düz kullanırsanız Makefileyapabilirsiniz deneyin make CXX=g++-4.4 CC=gcc-4.4 .
patryk.beza

1
bu komutu denediğimde "Dosya var" diyor ve bağlantıyı gerçekleştirmiyor. Herhangi bir yardım ?
Sentient07

60

gcc 4.5 ve 4.6, CUDA ile desteklenmez - kod derlenmez ve cuda-gdb dahil araç zincirinin geri kalanı düzgün çalışmaz. Bunları kullanamazsınız ve kısıtlama tartışılamaz.

Tek çözümünüz, ikinci bir derleyici olarak bir gcc 4.4 sürümünü kurmaktır (çoğu dağıtım buna izin verir). --compiler-bindirAlternatif bir derleyiciye işaret etmek için kullanılabilecek bir nvcc seçeneği vardır . Yerel bir dizin oluşturun ve ardından desteklenen gcc sürümü yürütülebilir dosyalarına sembolik bağlantılar oluşturun. Bu yerel dizini --compiler-bindirseçenek aracılığıyla nvcc'ye geçirin ve sisteminizin geri kalanını etkilemeden CUDA kodunu derleyebilmelisiniz.


DÜZENLE :

Bu sorunun ve cevabın CUDA 4 ile ilgili olduğuna dikkat edin.

NVIDIA, yazıldığından beri daha yeni CUDA araç zinciri sürümünde daha sonraki gcc sürümleri için desteği genişletmeye devam etti.

  • CUDA 4.1 sürümünden itibaren gcc 4.5 artık desteklenmektedir. gcc 4.6 ve 4.7 desteklenmez.
  • CUDA 5.0 sürümünden itibaren gcc 4.6 artık desteklenmektedir. gcc 4.7 desteklenmez.
  • CUDA 6.0 sürümünden itibaren gcc 4.7 artık desteklenmektedir.
  • CUDA 7.0 sürümünden itibaren gcc 4.8, Ubuntu 14.04 ve Fedora 21'de 4.9 desteği ile tam olarak desteklenmektedir.
  • CUDA 7.5 sürümü itibariyle gcc 4.8, Ubuntu 14.04 ve Fedora 21'de 4.9 desteği ile tam olarak desteklenmektedir.
  • CUDA 8 sürümünden itibaren gcc 5.3, Ubuntu 16.06 ve Fedora 23'te tam olarak desteklenmektedir.
  • CUDA 9 sürümünden itibaren gcc 6, Ubuntu 16.04, Ubuntu 17.04 ve Fedora 25'te tam olarak desteklenmektedir.
  • CUDA 9.2 sürümü, gcc 7 için destek ekler
  • CUDA 10.1 sürümü, gcc 8 için destek ekler

Şu anda (CUDA 10.1 itibariyle) CUDA'da gcc 9 desteği bulunmamaktadır.

NVIDIA'nın yakın zamanda buraya CUDA sürümü için desteklenen derleyiciyi ve işletim sistemi matrisini içeren çok kullanışlı bir tablo eklediğini unutmayın .


CUDA 7.5 için ne kullanıldığı hakkında bir fikriniz var mı?
GuySoft

2
CUDA 7.5'i gcc 4.9.3SLES 11 SP3 üzerinde sorunsuz kullanıyorum.
Peter VARGA

3
Ne? Bir kodun daha yüksek sürümlerle nasıl derlenmemesi gerekir (tabii ki kodlanmış sınırlamalar dışında) ? Aklıma gelen tek şey, bazı sürümler olduğu için C11 / C ++ 11'in varsayılan olarak etkinleştirildiği, ancak bu eski bir kodda bir soruna neden oluyorsa, bir komut satırı anahtarı ile kolayca geçici olarak çözülebilir.
Hi-Angel

2
Hi-Angel'da Seconding. #talonmies "Kısıtlama tartışılamaz" bile ne anlama geliyor? Daha yeni gcc ve gdb sürümleri, nesne dosyaları için eski ikili başlıkları destekler, çünkü "her zaman" (bir nevi) sahip oldukları gibi, daha yeni gcc sürümlerinin çalışmaması için hiçbir neden yoktur. Sembolik bağlantı çözümleri bir yana, başka herhangi bir sorun büyük olasılıkla ac önişlemci sürüm bayrağı ayarıdır ve gcc sürüm testi, bir tanım veya makronun parçası olarak bazı cuda başlığında "kodlanmış" ise, düzeltilmesi yeterince kolaydır. Bunun istisnası cuda gpu derleyicisinin kendisi olabilir.
Beracah

1
Bu ikili uyumluluk sorusu değil. CUDA araç zinciri, nvcc ve GPU ön uç ayrıştırıcısının hem ana bilgisayarı hem de cihaz kodunu derlemek ve bunları bir araya getirmek için çeşitli derleyici ve libc / libc ++ dahili başlıklarını yakalayıp aşırı yükleyebilmesini gerektirir. CUDA ayrıştırıcısının diğer şeylerin yanı sıra gcc dahili başlıklarını doğru şekilde ayrıştırabilmesi gerekir. Test edilmemiş gcc sürümleri, NVIDIA başlıklarında yerleşik önişlemci korumalarından bağımsız olarak başarısız olabilir ve başarısız olur. Bana ya inanabilirsiniz (CUDA araç zincirini neredeyse 10 yıldır hackleyen biri olarak) ya da inanmayabilirsiniz. Bu noktada, gerçekten bilmiyorum
talonmies

58
  1. CUDA sürümünüz için desteklenen maksimum GCC sürümünü kontrol edin:

     | CUDA version | max supported GCC version |
     |--------------|---------------------------|
     |      11      |             9             |
     |  10.1, 10.2  |             8             |
     |   9.2, 10.0  |             7             |
     |   9.0, 9.1   |             6             |
     |       8      |            5.3            |
     |       7      |            4.9            |
     |    5.5, 6    |            4.8            |
     |    4.2, 5    |            4.6            |
     |      4.1     |            4.5            |
     |      4.0     |            4.4            |
    
  2. Bu GCC sürümü için bir env değişkeni ayarlayın. Örneğin, CUDA 10.2 için:

     MAX_GCC_VERSION=8
    
  3. Bu sürüme sahip olduğunuzdan emin olun:

     sudo apt install gcc-$MAX_GCC_VERSION g++-$MAX_GCC_VERSION
    
  4. CUDA klasörlerine sembolik bağlantılar ekleyin:

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

    (veya /usr/local/cudaorada değilse CUDA kurulum yolunuzla değiştirin )

CUDA-GCC uyumluluk tablosu hakkında daha fazla bilgi için bu GitHub ana sayfasına bakın .


3
Hayatımı kurtardı lol yapılandırma kabusu !!!! teşekkür ederim. Bunu cuda 10'a gcc ve g ++ 7 sistem bağlantıları ile uyguladım. Bununla karşılaşan herkes için.
thekevshow

/usr/bin/gccVe /usr/bin/g++veya /usr/local/cuda/bin/gccklasörlerini kendim mi oluşturmalıyım ?
Josh Desmond

@JoshDesmond Bahsettiğiniz dosyaların
symlink'i

@ bryant1410 Dördüncü adımda komutları çalıştırdığımda, "Hata: dizin / usr / local / cuda / bin / gcc yok, iptal ediliyor" veya benzeri bir şeyde bir hata aldığımı hatırlıyorum. Şimdi anlıyorum (sorunun ayrıntılarını okuduktan sonra), cevabınızın OP tarafından bahsedilen bir adım 0 olduğunu varsayıyorum: "CUDA araç setini, ardından SDK'yı yükledim". Kurulumu cuda_10.2.89_440.33.01_linux.run, çalışma zamanında gcc uyumluluğuyla ilgili bir şikayetle başarısız olan NVIDIA'nın sihirbaz şeyiyle yapmaya çalışıyordum . Sonunda gcc 9: P'yi kaldırmaya karar verdim
Josh Desmond

1
NVCC'yi [ana | mini] conda (conda-forge paketi cudatoolkit-dev) ile kurduysanız, ortamınızın içinde bağlantı kurmanız gerekir ln -s /usr/bin/gcc-8 /home/user/miniconda3/envs/your_env/bin/gccveln -s /usr/bin/g++-8 /home/user/miniconda3/envs/your_env/bin/g++
Diego Ferri

25

Gearoid Murphy'nin çözümü benim için daha iyi çalışıyor çünkü dağıtımım (Ubuntu 11.10), gcc-4.4 ve gcc-4.6 aynı dizinde bulunuyor, bu yüzden --compiler-bindir yardımcı olmuyor. Tek uyarı, ayrıca g ++ - 4.4 yüklemem ve sembolik linklemem gerekti:

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

11

CUDA7.5 için şu satırlar çalışır:

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

9

Bu sorunu aşmak için "güncelleme alternatiflerini" nasıl kullanacağınızı kontrol edin :

... gcc 4.6 yüklerseniz, sürümler arasında kolayca geçiş yapabilmek için güncelleme-alternatifler komutunu da kullanabilirsiniz. Bu, şu şekilde yapılandırılabilir:

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

7

Eğer cmakebenim için kullanmıyorsanız , dosyaları düzenleme ve bağlantı kurma hilesinin hiçbiri işe yaramadı, bu yüzden gcc / g ++ sürümünü belirten bayrakları kullanarak derledim.
cmake -DCMAKE_C_COMPILER=gcc-6 -DCMAKE_CXX_COMPILER=g++-6 ..

Cazibe gibi çalıştı.


haha, cevabınızı buradaki diğer sorudan bağlamaya çalışacaktım çünkü bu konuya yazılması gerektiğini düşündüm. Yine iyi iş çıkardın! Teşekkürler
MikeDoho

SO'da mükerrer cevaplar göndermekten kaçınmalıyım ama benim seçeneğim yoktu. :)
markroxor

5

Çoğu dağıtımda, gcc-4.7 gibi en son derleyicinin yanı sıra başka bir gcc ve g ++ sürümünü yükleme olanağınız vardır. Buna ek olarak, çoğu yapı sistemi, sırasıyla diğer C ve C ++ derleyicilerini belirtmenize izin veren CCve CXXortam değişkenlerinin farkındadır . Bu yüzden şöyle bir şey öneririm:

CC=gcc-4.4 CXX=g++-4.4 cmake path/to/your/CMakeLists.txt

Makefiles için benzer bir yol olmalıdır. Ne yaptığınızı bilmiyorsanız / usr / local içinde özel sembolik bağlar kurmanızı önermiyorum.


3

Bu, fedora 23 için çalışır. Uyumlu gcc depoları, sizin fedora sürümünüze bağlı olarak biraz farklı olacaktır.

Aşağıdaki depoları kurarsanız:

sudo yum install compat-gcc-34-c++-3.4.6-37.fc23.x86_64 compat-gcc-34-3.4.6-37.fc23.x86_64 

Şimdi, cuda bin klasörünüzün içinde olduğunu varsayarak yukarıda belirtildiği gibi yumuşak bağlantıları yapın. /usr/local/cuda/

sudo ln -s /usr/bin/gcc-34 /usr/local/cuda/bin/gcc
sudo ln -s /usr/bin/g++-34 /usr/local/cuda/bin/g++

Artık nvccgcc sürüm hatası olmadan derleyebilmelisiniz .


2

Gearoid Murphy'nin çözümü büyüleyici bir şekilde çalışıyor. Benim için cuda için iki dizinim vardı -

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

Yazılım bağlantılarının yalnızca aşağıda belirtilen dizine eklenmesi gerekiyordu -

/usr/local/cuda 

Ayrıca, SchighSchagh tarafından belirtildiği gibi hem g ++ hem de gcc yumuşak bağlantıları gerekliydi.


2

Gcc belirli bir sürümünü (örneğin gcc-4.4,) kullanmak için konfigüre nvcc başka yolu, düzenleme etmektir nvcc.profile ve alter PATH ilk kullanmak istediğiniz gcc yolu eklemek için.

Örneğin (/ opt içinde kurulu gcc-4.4.6):

PATH += /opt/gcc-4.4.6/lib/gcc/x86_64-unknown-linux-gnu/4.4.6:/opt/gcc-4.4.6/bin:$(TOP)/open64/bin:$(TOP)/share/cuda/nvvm:$(_HERE_):

Nvcc.profile dosyasının konumu değişir, ancak nvcc yürütülebilir dosyasının kendisiyle aynı dizinde olması gerekir .

Nvcc.profile , nvcc kılavuzuna göre kullanıcı yapılandırması için tasarlanmadığından , bu biraz hack'lendi, ancak benim için en iyi şekilde çalışan çözümdü.


Bunu yapmanızı öneririm, ancak g ++ ile doğru gcc sürümüne sembolik bağlı bir dizine giden yolu işaret etmenizi öneririm (özellikle dağıtımınız desteklenen bir gcc sürümü sağlıyorsa yararlıdır). Örneğin:mkdir /usr/local/bin/cuda-hack && ln -s /usr/bin/g++-5 /usr/local/bin/cuda-hack
Sami Liedes


2

Kullanırken kafası karışan benim gibi insanlar için cmake, FindCUDA.cmakekomut dosyası bazı şeyleri geçersiz kılar nvcc.profile. Http://public.kitware.com/Bug/view.php?id=13674 uyarınca nvccayarlayarak ana bilgisayar derleyicisini belirtebilirsiniz .CUDA_HOST_COMPILER


cmake .. -DCMAKE_INSTALL_PREFIX=/InstallPos_GPU/ -DCMAKE_C_COMPILER="/gcc-8.3.0/bin/gcc" -DCMAKE_CXX_COMPILER="/gcc-8.3.0/bin/g++" -DGMX_GPU=ON -DCUDA_TOOLKIT_ROOT_DIR=/cuda-7.5/ -D NVCCFLAGS=" -ccbin /cuda-7.5/bin/" -DCUDA_HOST_COMPILER=/cuda-7.5/bin/gccGPU destekli gromac'leri başarıyla kurdum.
pengchy

2

Gcc'nin eski sürümlerini, g ++ yüklemem gerekiyordu.

    sudo apt-get install gcc-4.4
    sudo apt-get install g++-4.4

Gcc-4.4'ün / usr / bin / içinde olduğunu ve g ++ için aynı olduğunu kontrol edin. O zaman yukarıdaki çözümü kullanabilirim:

    sudo ln -s /usr/bin/gcc-4.4 /opt/cuda/bin/gcc
    sudo ln -s /usr/bin/g++-4.4 /opt/cuda/bin/g++

Bu komutu denediğimde "Dosya var" diyor ve bağlantıyı gerçekleştirmiyor. Herhangi bir yardım ?
Sentient07

Ne söyleyeceğimi bilemeyecek kadar bu konuda düşünmekten korkarım. Umarım diğerleri yardımcı olabilir.
gezici

2

İçinde aşağıdakilere $CUDA_HOME/include/host_config.hbenzer satırlar bulun (farklı CUDA sürümleri arasında biraz farklılık gösterebilir):

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

#error -- unsupported GNU version! gcc versions later than 4.9 are not supported!

#endif [> __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ > 9) <]
//...

Koşullarınıza uygun olarak bunları kaldırın veya değiştirin.

Bu yöntemin potansiyel olarak güvenli olmadığını ve yapınızı bozabileceğini unutmayın. Örneğin, gcc 5 varsayılan olarak C ++ 11 kullanır, ancak bu, CUDA 7.5'ten itibaren nvcc için geçerli değildir. Bir geçici çözüm eklemek

--Xcompiler="--std=c++98" CUDA <= 6.5 için

veya

--std=c++11 CUDA> = 7.0 için.


--std=c++seçeneği nereye ekliyoruz ?
2017

1

Bu hatayla karşılaşırsanız, lütfen günlük dosyasını okuyun:

$ cat /var/log/cuda-installer.log 
[INFO]: Driver installation detected by command: apt list --installed | grep -e nvidia-driver-[0-9][0-9][0-9] -e nvidia-[0-9][0-9][0-9]
[INFO]: Cleaning up window
[INFO]: Complete
[INFO]: Checking compiler version...
[INFO]: gcc location: /usr/bin/gcc

[INFO]: gcc version: gcc version 9.2.1 20191008 (Ubuntu 9.2.1-9ubuntu2) 

[ERROR]: unsupported compiler version: 9.2.1. Use --override to override this check.

Günlük dosyasındaki öneriyi izlemeniz yeterlidir:

sudo sh cuda_<version>_linux.run --override

İş bitmiş :)

Bu --overrideseçeneği kullanarak Kubuntu 19.10 üzerinde gcc 9.2 ile CUDA 10.2'yi kurdum .


0

CUDA 8.0 örneklerini Ubuntu 16.10'da derlemek için şunları yaptım:

sudo apt-get install gcc-5 g++-5
cd /path/to/NVIDIA_CUDA-8.0_Samples
# Find the path to the library (this should be in NVIDIA's Makefiles)
LIBLOC=`find /usr/lib -name "libnvcuvid.so.*" | head -n1 | perl -pe 's[/usr/lib/(nvidia-\d+)/.*][$1]'`
# Substitute that path into the makefiles for the hard-coded, incorrect one
find . -name "*.mk" | xargs perl -pi -e "s/nvidia-\d+/$LIBLOC/g"
# Make using the supported compiler
HOST_COMPILER=g++-5 make

Bu, tüm sistemi değiştirmeme veya yalnızca ikili dosyalara sembolik bağlantılar oluşturmama avantajına sahiptir (bu, kitaplık bağlama sorunlarına neden olabilir.)


0

Bu benim sorunumu çözdü:

sudo rm /usr/local/cuda/bin/gcc
sudo rm /usr/local/cuda/bin/g++
sudo apt install gcc-4.4 g++-4.4
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++

0

CUDA 6.5 (ve görünüşe göre 7.0 ve 7.5) için, gcc 4.8.5 RPM paketinin (Fedora Core 30 altında) bu gcc sürümünün sisteminizin mevcut GCC ile birlikte kurulmasına izin veren bir sürümünü oluşturdum.

Tüm bu bilgileri burada bulabilirsiniz .


0

Benim durumumda, Ubuntu sürümünden CUDA zaten yüklenmişti ve cmake, NVidia SDK Yöneticisi'ni kullanarak yeni yüklenen sürüm yerine bunu algılayacaktı.

Koştum dpkg -l | grep cudave her iki versiyonu da görebiliyordum.

Yapmam gereken, eski CUDA'yı (benim durumumda sürüm 9.1) kaldırmak ve yeni sürümü tek başına bırakmak (sürüm 10.2). Purge komutunu şu şekilde kullandım:

sudo apt-get purge libcudart9.1 nvidia-cuda-dev nvidia-cuda-doc \
                                nvidia-cuda-gdb nvidia-cuda-toolkit

Lütfen paket adlarının kurulumunuzdan kaldırmak istediğiniz sürümle eşleştiğini doğrulayın.

Tüm ve kitaplıklarını SDK sürümüne yeniden yönlendirmek cmakeiçin boş bir dizinden yeniden çalıştırmam gerekti (eski yollar mevcut yapı ortamında pişirildiğinden).BUILD#include


-1

Bunun nedeni, mevcut CUDA sürümünüzün mevcut GCC sürümünüzü desteklememesidir. Aşağıdakileri yapmanız gerekir:

  1. Desteklenen GCC sürümünü bulun (benim durumumda CUDA 9 için 5)

    • CUDA 4.1: GCC 4.5
    • CUDA 5.0: GCC 4.6
    • CUDA 6.0: GCC 4.7
    • CUDA 7.0: GCC 4.8
    • CUDA 7.5: GCC 4.8
    • CUDA 8: GCC 5.3
    • CUDA 9: GCC 5.5
    • CUDA 9.2: GCC 7
    • CUDA 10.1: GCC 8
  2. Desteklenen GCC sürümünü yükleyin

    sudo apt-get install gcc-5
    sudo apt-get install g++-5
    
  3. İçinde GCC için sembolik bağlantıları değiştirme /usr/bindizinde

    cd /usr/bin
    sudo rm gcc
    sudo rm g++
    sudo ln -s /usr/bin/gcc-5 gcc
    sudo ln -s /usr/bin/g++-5 g++
    
  4. İçinde GCC için sembolik bağlantıları değiştirme /usr/local/cuda-9.0/bindizinde

    cd /usr/local/cuda-9.0/bin
    sudo rm gcc
    sudo rm g++
    sudo ln -s /usr/bin/gcc-5 gcc
    sudo ln -s /usr/bin/g++-5 g++
    
  5. Ekle -DCUDA_HOST_COMPILER=/usr/bin/gcc-5sizin için setup.pyderleme için kullanılan dosyanın,

    if torch.cuda.is_available() and CUDA_HOME is not None:
        extension = CUDAExtension
        sources += source_cuda
        define_macros += [("WITH_CUDA", None)]
        extra_compile_args["nvcc"] = [
            "-DCUDA_HAS_FP16=1",
            "-D__CUDA_NO_HALF_OPERATORS__",
            "-D__CUDA_NO_HALF_CONVERSIONS__",
            "-D__CUDA_NO_HALF2_OPERATORS__",
            "-DCUDA_HOST_COMPILER=/usr/bin/gcc-5"
        ]
    
  6. Eski yapı dizinini kaldırın

    rm -rd build/
    
  7. Ayarlayarak tekrar derleyin CUDAHOSTCXX=/usr/bin/gcc-5

    CUDAHOSTCXX=/usr/bin/gcc-5 python setup.py build develop
    

Not: gcc: error trying to exec 'cc1plus': execvp: no such file or directoryBu adımları izledikten sonra hala hatayı alıyorsanız, GCC'yi bu şekilde yeniden yüklemeyi ve ardından tekrar derlemeyi deneyin:

sudo apt-get install --reinstall gcc-5
sudo apt-get install --reinstall g++-5

Krediler: https://github.com/facebookresearch/maskrcnn-benchmark/issues/25#issuecomment-433382510

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.