У меня проблемы с компиляцией некоторых примеров, поставляемых с 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 имеет целую систему в качестве зависимости ...
Ответы:
Как уже отмечалось, nvcc зависит от gcc 4.4. Можно настроить nvcc для использования правильной версии gcc без передачи каких-либо параметров компилятора, добавив программные ссылки в каталог bin, созданный при установке nvcc.
Бинарный каталог cuda по умолчанию (установка по умолчанию) - / usr / local / cuda / bin, достаточно добавить программную ссылку на правильную версию gcc из этого каталога:
sudo ln -s /usr/bin/gcc-4.4 /usr/local/cuda/bin/gcc
источник
nvcc
вызовы работают, но говорят, применяяmake
к образцам CUDA, вскоре приносят заклятия , начиная с:nvcc -ccbin g++
. Для меня я использовал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++
.cmake .. && make
вы можете попробоватьcmake -D CUDA_NVCC_FLAGS="-ccbin gcc-4.4" .. && make
. Если вы используете простой,Makefile
вы можете попробоватьmake CXX=g++-4.4 CC=gcc-4.4
.gcc 4.5 и 4.6 не поддерживаются CUDA - код не компилируется, и остальная часть цепочки инструментов, включая cuda-gdb, не будет работать должным образом. Вы не можете их использовать, и ограничение не подлежит обсуждению.
Единственное решение - установить версию gcc 4.4 в качестве второго компилятора (в большинстве дистрибутивов это допускается). Существует опция nvcc,
--compiler-bindir
которая может использоваться для указания альтернативного компилятора. Создайте локальный каталог, а затем сделайте символические ссылки на исполняемые файлы поддерживаемой версии gcc. Передайте этот локальный каталог в nvcc с помощью--compiler-bindir
опции, и вы сможете скомпилировать код CUDA, не затрагивая остальную часть вашей системы.ИЗМЕНИТЬ :
Обратите внимание, что этот вопрос и ответ относятся к CUDA 4.
С момента его написания NVIDIA продолжала расширять поддержку более поздних версий gcc в новой версии инструментальной цепочки CUDA.
В настоящее время (начиная с CUDA 10.1) в CUDA нет поддержки gcc 9.
Обратите внимание, что NVIDIA недавно добавила сюда очень полезную таблицу, которая содержит поддерживаемый компилятор и матрицу ОС для текущей версии CUDA.
источник
gcc 4.9.3
без проблем использую CUDA 7.5 на SLES 11 SP3.Проверьте максимальную поддерживаемую версию GCC для вашей версии CUDA:
Установите переменную env для этой версии GCC. Например, для CUDA 10.2:
Убедитесь, что у вас установлена эта версия:
Добавьте символические ссылки в папки CUDA:
(или замените
/usr/local/cuda
на свой путь установки CUDA, если его там нет)См. Эту суть GitHub для получения дополнительной информации о таблице совместимости CUDA-GCC .
источник
/usr/bin/gcc
и/usr/bin/g++
или/usr/local/cuda/bin/gcc
?cuda_10.2.89_440.33.01_linux.run
мастера NVIDIA , который просто не удался во время выполнения с жалобой на совместимость с gcc. Я закончил тем, что просто решил удалить gcc 9: Pcudatoolkit-dev
), вам необходимо создать ссылку внутри вашего env-подобногоln -s /usr/bin/gcc-8 /home/user/miniconda3/envs/your_env/bin/gcc
иln -s /usr/bin/g++-8 /home/user/miniconda3/envs/your_env/bin/g++
Решение Gearoid Murphy работает лучше для меня, поскольку в моем дистрибутиве (Ubuntu 11.10) gcc-4.4 и gcc-4.6 находятся в одном каталоге, поэтому --compiler-bindir не поможет. Единственное предостережение в том, что мне также пришлось установить g ++ - 4.4 и создать символическую ссылку:
источник
Для CUDA7.5 эти строки работают:
источник
Узнайте, как использовать «альтернативы обновления», чтобы обойти эту проблему:
источник
Если использовать
cmake
для меня, то ни один из приемов редактирования файлов и связывания не сработал, поэтому я скомпилировал с использованием флагов, которые указывают версию gcc / g ++.cmake -DCMAKE_C_COMPILER=gcc-6 -DCMAKE_CXX_COMPILER=g++-6 ..
Работал как шарм.
источник
В большинстве дистрибутивов у вас есть возможность установить другую версию gcc и g ++ помимо самого последнего компилятора, такого как gcc-4.7. Кроме того, большинство систем сборки знают о переменных окружения
CC
иCXX
, которые позволяют указать вам другие компиляторы C и C ++ соответственно. ТАК я предлагаю что-то вроде:Для Makefile должен быть аналогичный способ. Я не рекомендую устанавливать собственные символические ссылки в / usr / local, если вы не знаете, что делаете.
источник
Это работает для Fedora 23. Совместимые репозитории gcc будут немного отличаться в зависимости от вашей версии Fedora.
Если вы установите следующие репозитории:
Теперь сделайте мягкие ссылки, как указано выше, предполагая, что ваша папка cuda bin находится в
/usr/local/cuda/
Теперь вы можете скомпилировать
nvcc
без ошибки версии gcc.источник
Решение Героида Мерфи работает как шарм. Для меня у меня было два каталога cuda -
Программные ссылки нужно было добавить только в каталог, указанный ниже -
Кроме того, как упоминал SchighSchagh, требовались программные ссылки как g ++, так и gcc.
источник
Другой способ настроить nvcc для использования определенной версии gcc (например, gcc-4.4) - отредактировать nvcc.profile и изменить PATH, чтобы включить путь к gcc, который вы хотите использовать первым.
Например (gcc-4.4.6 установлен в / opt):
Расположение nvcc.profile может быть разным , но он должен находиться в том же каталоге, что и сам исполняемый файл nvcc .
Это немного похоже на взлом, поскольку nvcc.profile не предназначен для пользовательской конфигурации в соответствии с руководством nvcc, но это было решение, которое лучше всего сработало для меня.
источник
mkdir /usr/local/bin/cuda-hack && ln -s /usr/bin/g++-5 /usr/local/bin/cuda-hack
CUDA после некоторых модификаций заголовка совместим с gcc4.7 и, возможно, более поздней версией: https://www.udacity.com/wiki/cs344/troubleshoot_gcc47
источник
Для людей вроде меня, которые путаются при использовании
cmake
,FindCUDA.cmake
сценарий отменяет некоторые вещи изnvcc.profile
. Вы можете указатьnvcc
компилятор хоста, установив егоCUDA_HOST_COMPILER
согласно http://public.kitware.com/Bug/view.php?id=13674 .источник
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
Я успешно установил громаки с поддержкой GPU.Мне пришлось установить более старые версии gcc, g ++.
Убедитесь, что gcc-4.4 находится в / usr / bin /, и то же самое для g ++. Тогда я мог бы использовать решение выше:
источник
В
$CUDA_HOME/include/host_config.h
найдите такие строки (могут немного отличаться в зависимости от версии CUDA):Удалите или измените их в соответствии с вашим состоянием.
Обратите внимание, что этот метод потенциально небезопасен и может нарушить вашу сборку. Например, gcc 5 использует C ++ 11 по умолчанию, однако это не относится к nvcc начиная с CUDA 7.5. Обходной путь - добавить
--Xcompiler="--std=c++98"
для CUDA <= 6.5или
--std=c++11
для CUDA> = 7.0.источник
--std=c++
опцию?Если вы столкнулись с этой ошибкой, прочтите файл журнала:
Просто следуйте предложению в файле журнала:
Работа выполнена :)
Я только что установил CUDA 10.2 с gcc 9.2 на Kubuntu 19.10, используя
--override
опцию.источник
Чтобы скомпилировать примеры CUDA 8.0 на Ubuntu 16.10, я сделал:
Это имеет то преимущество, что не модифицирует всю систему или не создает символические ссылки только на двоичные файлы (что может вызвать проблемы с компоновкой библиотеки).
источник
Это решило мою проблему:
источник
Для CUDA 6.5 (и, по всей видимости, 7.0 и 7.5) я создал версию RPM-пакета gcc 4.8.5 (в Fedora Core 30), которая позволяет установить эту версию gcc вместе с текущим GCC вашей системы.
Вы можете найти всю эту информацию здесь .
источник
В моем случае у меня был уже установлен CUDA из версии Ubuntu, и cmake обнаружил бы его вместо недавно установленной версии с помощью NVidia SDK Manager.
Я побежал
dpkg -l | grep cuda
и увидел обе версии.Что мне нужно было сделать, так это удалить старую версию CUDA (версия 9.1 в моем случае) и оставить новую версию в покое (версия 10.2). Я использовал команду очистки так:
Убедитесь, что имена пакетов соответствуют версии, которую вы хотите удалить из установки.
Мне пришлось перезапустить
cmake
из пустогоBUILD
каталога, чтобы перенаправить все#include
библиотеки и в версию SDK (поскольку старые пути были запечены в существующей среде сборки).источник
Это происходит потому, что ваша текущая версия CUDA не поддерживает вашу текущую версию GCC. Вам необходимо сделать следующее:
Найдите поддерживаемую версию GCC (в моем случае 5 для CUDA 9)
Установите поддерживаемую версию GCC
Измените программные ссылки для GCC в
/usr/bin
каталогеИзмените программные ссылки для GCC в
/usr/local/cuda-9.0/bin
каталогеДобавить
-DCUDA_HOST_COMPILER=/usr/bin/gcc-5
в свойsetup.py
файл, используемый для компиляцииУдалите старый каталог сборки
Снова скомпилируйте, установив
CUDAHOSTCXX=/usr/bin/gcc-5
Примечание. Если
gcc: error trying to exec 'cc1plus': execvp: no such file or directory
после выполнения этих действий вы все еще получаете сообщение об ошибке, попробуйте переустановить GCC следующим образом, а затем снова скомпилировать:Кредиты: https://github.com/facebookresearch/maskrcnn-benchmark/issues/25#issuecomment-433382510
источник