Saya mengalami masalah saat mengumpulkan beberapa contoh yang dikirimkan dengan CUDA SDK. Saya telah menginstal driver pengembang (versi 270.41.19) dan toolkit CUDA, lalu akhirnya SDK (keduanya versi 4.0.17).
Awalnya itu tidak mengkompilasi sama sekali pemberian:
error -- unsupported GNU version! gcc 4.5 and up are not supported!
Saya menemukan baris yang bertanggung jawab di 81: /usr/local/cuda/include/host_config.h dan mengubahnya menjadi:
//#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ > 4)
#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ > 6)
sejak saat itu saya hanya mendapatkan beberapa contoh untuk dikompilasi, itu berhenti dengan:
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
Seperti beberapa contoh kompilasi, saya rasa ini bukan masalah driver, tetapi harus ada hubungannya dengan versi gcc yang tidak didukung. Menurunkan versi bukanlah suatu opsi karena gcc4.6 memiliki seluruh sistem sebagai dependensi pada saat ini ...
Jawaban:
Seperti yang sudah dijelaskan, nvcc bergantung pada gcc 4.4. Anda dapat mengonfigurasi nvcc untuk menggunakan versi gcc yang benar tanpa meneruskan parameter compiler apa pun dengan menambahkan tautan lunak ke direktori bin yang dibuat dengan instalasi nvcc.
Direktori biner cuda default (default instalasi) adalah / usr / local / cuda / bin, menambahkan softlink ke versi gcc yang benar dari direktori ini sudah cukup:
sudo ln -s /usr/bin/gcc-4.4 /usr/local/cuda/bin/gcc
sumber
nvcc
doa bekerja, tetapi mengatakan, menerapkanmake
ke Sampel CUDA, segera membawa doa dimulai dengan:nvcc -ccbin g++
. Bagi saya, saya menggunakansudo ln -s /usr/bin/gcc-4.9 /usr/local/cuda/bin/gcc
dansudo ln -s /usr/bin/g++-4.9 /usr/local/cuda/bin/g++
.cmake .. && make
Anda dapat mencobacmake -D CUDA_NVCC_FLAGS="-ccbin gcc-4.4" .. && make
. Jika Anda menggunakan polosMakefile
Anda bisa mencobamake CXX=g++-4.4 CC=gcc-4.4
.gcc 4.5 dan 4.6 tidak didukung dengan CUDA - kode tidak dapat dikompilasi dan rantai alat lainnya, termasuk cuda-gdb, tidak akan berfungsi dengan baik. Anda tidak dapat menggunakannya, dan batasannya tidak dapat dinegosiasikan.
Satu-satunya solusi Anda adalah menginstal versi gcc 4.4 sebagai kompiler kedua (sebagian besar distribusi akan mengizinkannya). Ada opsi untuk nvcc
--compiler-bindir
yang dapat digunakan untuk menunjuk ke kompiler alternatif. Buat direktori lokal dan kemudian buat tautan simbolis ke versi gcc yang dapat dieksekusi. Teruskan direktori lokal itu ke nvcc melalui--compiler-bindir
opsi, dan Anda seharusnya dapat mengkompilasi kode CUDA tanpa mempengaruhi sistem Anda yang lain.EDIT :
Perhatikan bahwa pertanyaan dan jawaban ini berkaitan dengan CUDA 4.
Sejak ditulis, NVIDIA terus memperluas dukungan untuk versi gcc yang lebih baru dalam rilis toolchain CUDA yang lebih baru
Saat ini (mulai CUDA 10.1) tidak ada dukungan gcc 9 di CUDA.
Perhatikan bahwa NVIDIA baru-baru ini menambahkan tabel yang sangat berguna di sini yang berisi compiler yang didukung dan matriks OS untuk rilis CUDA saat ini.
sumber
gcc 4.9.3
SLES 11 SP3 tanpa masalah.Periksa versi GCC maksimum yang didukung untuk versi CUDA Anda:
Setel env var untuk versi GCC tersebut. Misalnya, untuk CUDA 10.2:
Pastikan Anda telah menginstal versi itu:
Tambahkan symlink dalam folder CUDA:
(atau gantikan
/usr/local/cuda
dengan jalur instalasi CUDA Anda, jika tidak ada)Lihat inti GitHub ini untuk informasi lebih lanjut tentang tabel kompatibilitas CUDA-GCC .
sumber
/usr/bin/gcc
dan/usr/bin/g++
atau/usr/local/cuda/bin/gcc
sendiri?cuda_10.2.89_440.33.01_linux.run
wizard NVIDIA , yang gagal saat runtime dengan keluhan tentang kompatibilitas gcc. Saya akhirnya memutuskan untuk menghapus gcc 9: Pcudatoolkit-dev
), maka Anda perlu menautkan di dalam env Anda sepertiln -s /usr/bin/gcc-8 /home/user/miniconda3/envs/your_env/bin/gcc
danln -s /usr/bin/g++-8 /home/user/miniconda3/envs/your_env/bin/g++
Solusi Gearoid Murphy bekerja lebih baik untuk saya karena di distro saya (Ubuntu 11.10), gcc-4.4 dan gcc-4.6 berada di direktori yang sama, jadi --compiler-bindir tidak membantu. Satu-satunya peringatan adalah saya juga harus menginstal g ++ - 4.4 dan menautkannya juga:
sumber
Untuk CUDA7.5 baris ini berfungsi:
sumber
Lihat cara menggunakan "pembaruan-alternatif" untuk mengatasi masalah ini:
sumber
Jika menggunakan
cmake
untuk saya tidak ada peretasan mengedit file dan penautan yang berfungsi, jadi saya mengkompilasi menggunakan bendera yang menentukan versi gcc / g ++.cmake -DCMAKE_C_COMPILER=gcc-6 -DCMAKE_CXX_COMPILER=g++-6 ..
Bekerja seperti pesona.
sumber
Pada sebagian besar distribusi, Anda dapat menginstal versi gcc dan g ++ lain di samping kompiler terbaru seperti gcc-4.7. Selain itu, sebagian besar sistem build mengetahui variabel
CC
danCXX
lingkungan, yang memungkinkan Anda menentukan compiler C dan C ++ lainnya. JADI saya menyarankan sesuatu seperti:Untuk Makefiles harus ada cara serupa. Saya tidak merekomendasikan pengaturan symlink khusus di / usr / local kecuali Anda tahu apa yang Anda lakukan.
sumber
Ini bekerja untuk fedora 23. Repositori compat gcc akan sedikit berbeda berdasarkan versi fedora Anda.
Jika Anda menginstal repositori berikut:
Sekarang buat tautan lunak seperti yang disebutkan di atas dengan asumsi folder cuda bin Anda ada di dalamnya
/usr/local/cuda/
Sekarang Anda seharusnya dapat mengompilasi
nvcc
tanpa kesalahan versi gcc.sumber
Solusi Gearoid Murphy bekerja seperti pesona. Bagi saya, saya memiliki dua direktori untuk cuda -
Tautan lunak harus ditambahkan hanya ke direktori yang disebutkan di bawah -
Selain itu, tautan lunak g ++ dan gcc diperlukan seperti yang disebutkan oleh SchighSchagh.
sumber
Cara lain untuk mengkonfigurasi nvcc agar menggunakan versi gcc tertentu (gcc-4.4, misalnya), adalah dengan mengedit nvcc.profile dan mengubah PATH untuk menyertakan jalur ke gcc yang ingin Anda gunakan terlebih dahulu.
Misalnya (gcc-4.4.6 diinstal di / opt):
Lokasi nvcc.profile bervariasi, tetapi harus berada di direktori yang sama dengan nvcc yang dapat dieksekusi itu sendiri.
Ini sedikit hack, karena nvcc.profile tidak dimaksudkan untuk konfigurasi pengguna sesuai dengan manual nvcc, tetapi itu adalah solusi yang bekerja paling baik untuk saya.
sumber
mkdir /usr/local/bin/cuda-hack && ln -s /usr/bin/g++-5 /usr/local/bin/cuda-hack
CUDA setelah beberapa modifikasi tajuk kompatibel dengan gcc4.7 dan mungkin versi yang lebih tinggi: https://www.udacity.com/wiki/cs344/troubleshoot_gcc47
sumber
Untuk orang-orang seperti saya yang bingung saat menggunakan
cmake
,FindCUDA.cmake
skrip menimpa beberapa hal darinvcc.profile
. Anda dapat menentukannvcc
kompiler host dengan menyetelCUDA_HOST_COMPILER
sesuai http://public.kitware.com/Bug/view.php?id=13674 .sumber
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/gcc
Saya telah berhasil menginstal gromacs dengan dukungan GPU.Saya harus menginstal versi lama gcc, g ++.
Periksa apakah gcc-4.4 ada di / usr / bin /, dan sama untuk g ++ Kemudian saya bisa menggunakan solusi di atas:
sumber
Di
$CUDA_HOME/include/host_config.h
, temukan baris seperti ini (mungkin sedikit berbeda di antara versi CUDA yang berbeda):Hapus atau ubah sesuai dengan kondisi Anda.
Perhatikan bahwa metode ini berpotensi tidak aman dan dapat merusak build Anda. Misalnya, gcc 5 menggunakan C ++ 11 sebagai default, namun tidak demikian halnya untuk nvcc pada CUDA 7.5. Solusinya adalah menambahkan
--Xcompiler="--std=c++98"
untuk CUDA <= 6.5atau
--std=c++11
untuk CUDA> = 7.0.sumber
--std=c++
opsi?Jika Anda mengalami kesalahan ini, harap baca file log:
Ikuti saja saran di file log:
Pekerjaan selesai :)
Saya baru saja menginstal CUDA 10.2 dengan gcc 9.2 di Kubuntu 19.10 menggunakan
--override
opsi tersebut.sumber
Untuk mengkompilasi contoh CUDA 8.0 di Ubuntu 16.10, saya melakukan:
Keuntungannya adalah tidak memodifikasi keseluruhan sistem atau membuat symlink hanya ke binari (yang dapat menyebabkan masalah penautan pustaka.)
sumber
Ini memecahkan masalah saya:
sumber
Untuk CUDA 6.5 (dan ternyata 7.0 dan 7.5), saya telah membuat versi paket gcc 4.8.5 RPM (di bawah Fedora Core 30) yang memungkinkan versi gcc tersebut diinstal bersama GCC sistem Anda saat ini.
Anda dapat menemukan semua informasi itu di sini .
sumber
Dalam kasus saya, saya sudah menginstal CUDA dari versi Ubuntu dan cmake akan mendeteksi yang itu alih-alih versi yang baru diinstal menggunakan NVidia SDK Manager.
Saya berlari
dpkg -l | grep cuda
dan bisa melihat kedua versi.Apa yang harus saya lakukan adalah mencopot pemasangan CUDA lama (versi 9.1 dalam kasus saya) dan membiarkan versi baru (versi 10.2). Saya menggunakan perintah pembersihan seperti ini:
Harap verifikasi bahwa nama paket cocok dengan versi yang ingin Anda hapus dari instalasi Anda.
Saya harus menjalankan ulang
cmake
dariBUILD
direktori kosong untuk mengarahkan semua#include
perpustakaan dan ke versi SDK (karena jalur lama dibuat di lingkungan build yang ada).sumber
Ini terjadi karena versi CUDA Anda saat ini tidak mendukung versi GCC Anda saat ini. Anda perlu melakukan hal berikut:
Temukan versi GCC yang didukung (dalam kasus saya 5 untuk CUDA 9)
Instal versi GCC yang didukung
Ubah softlink untuk GCC di
/usr/bin
direktoriUbah softlink untuk GCC di
/usr/local/cuda-9.0/bin
direktoriTambahkan
-DCUDA_HOST_COMPILER=/usr/bin/gcc-5
kesetup.py
file Anda , digunakan untuk kompilasiHapus direktori build lama
Kompilasi lagi dengan mengatur
CUDAHOSTCXX=/usr/bin/gcc-5
Catatan: Jika Anda masih mendapatkan
gcc: error trying to exec 'cc1plus': execvp: no such file or directory
kesalahan setelah mengikuti langkah-langkah ini, coba instal ulang GCC seperti ini lalu kompilasi lagi:Penghargaan: https://github.com/facebookresearch/maskrcnn-benchmark/issues/25#issuecomment-433382510
sumber