как исправить & ldquo; Неподдерживаемая версия GNU! версия gcc позже 6 & hellip; & rdquo; [Дубликат]

Это аргумент quit(). См. ?quit.

Аргументы :

status: the (numerical) error status to be returned to the operating
        system, where relevant.  Conventionally ‘0’ indicates
        successful completion.

Подробности :

 Some error statuses are used by R itself.  The default error
 handler for non-interactive use effectively calls ‘q("no", 1,
 FALSE)’ and returns error code 1.  Error status 2 is used for R
 ‘suicide’, that is a catastrophic failure, and other small numbers
 are used by specific ports for initialization failures.  It is
 recommended that users choose statuses of 10 or more.
73
задан talonmies 2 December 2015 в 05:48
поделиться

16 ответов

Как уже указывалось, nvcc зависит от gcc 4.4. Можно настроить nvcc на использование правильной версии gcc без передачи каких-либо параметров компилятора, добавив программные ссылки в каталог bin, созданный с помощью установки nvcc.

. Бинарный каталог cuda по умолчанию (установка по умолчанию) usr / local / cuda / bin, добавление softlink к правильной версии gcc из этого каталога достаточно:

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

88
ответ дан Matt 16 August 2018 в 05:20
поделиться
  • 1
    & Quot; обновление-альтернатив & Quot; также может помочь команда, особенно при установке CUDA 5.0 – phoad 7 January 2013 в 23:37
  • 2
    Мне также пришлось добавить символическую ссылку на правильную версию g ++. – Auron 6 September 2013 в 16:52
  • 3
    Мне также пришлось ссылаться на g ++. В противном случае простые nvcc вызовы работают, но скажем, применяя make к CUDA Samples, вскоре приводят вызовы, начинающиеся с: 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++. – user2023370 21 December 2015 в 13:32
  • 4
    Если вы скомпилируете cmake .. && make, вы можете попробовать cmake -D CUDA_NVCC_FLAGS="-ccbin gcc-4.4" .. && make. Если вы используете plain Makefile, вы можете попробовать make CXX=g++-4.4 CC=gcc-4.4. – patryk.beza 4 April 2016 в 18:54
  • 5
    когда я пытаюсь выполнить эту команду, он говорит «Файл существует». и не выполняет ссылку. Любая помощь ? – Sentient07 25 May 2016 в 20:28

CUDA после некоторых изменений заголовков, совместимых с gcc4.7 и, возможно, более высокой версией: https://www.udacity.com/wiki/cs344/troubleshoot_gcc47

2
ответ дан 42n4 16 August 2018 в 05:20
поделиться

Решение Gearoid Murphy работает как шарм. Для меня у меня было два каталога для cuda -

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

. Мгновенные ссылки должны были добавляться только в каталог, упомянутый ниже -

/usr/local/cuda 

Кроме того, как g ++, так и gcc soft ссылки требовались, как упоминалось SchighSchagh.

2
ответ дан arpwal 16 August 2018 в 05:20
поделиться

Обновление:

Для CUDA 9:

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

Сначала необходимо установить gcc и g ++ 6:

sudo apt install gcc-6 g++-6

Старый ответ:

Для CUDA 8:

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

Сначала необходимо установить gcc и g ++ 5:

sudo apt install gcc-5 g++-5
15
ответ дан bryant1410 16 August 2018 в 05:20
поделиться

Для таких людей, как я, которые запутываются при использовании cmake, сценарий FindCUDA.cmake переопределяет некоторые вещи из nvcc.profile. Вы можете указать компилятор хоста nvcc, установив CUDA_HOST_COMPILER в соответствии с http://public.kitware.com/Bug/view.php?id=13674 .

1
ответ дан cheshirekow 16 August 2018 в 05:20
поделиться

Это работает для fedora 23. Репозитории compat gcc будут немного отличаться в зависимости от вашей версии fedora.

Если вы устанавливаете следующие репозитории:

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

Теперь сделайте как упоминалось выше, предполагается, что ваша папка cuda bin находится в /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++

Теперь вы можете скомпилировать с nvcc без ошибки версии gcc.

3
ответ дан Chris Chaffin 16 August 2018 в 05:20
поделиться

Чтобы скомпилировать примеры CUDA 8.0 на Ubuntu 16.10, я сделал:

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

Это имеет то преимущество, что не изменяйте всю систему или не создавайте символические ссылки только для двоичных файлов (что может вызвать проблемы с связыванием библиотек .)

0
ответ дан Eponymous 16 August 2018 в 05:20
поделиться

Другим способом настройки nvcc для использования конкретной версии gcc (например, gcc-4.4) является редактирование nvcc.profile и изменение PATH для включения путь к gcc, который вы хотите использовать первым.

Например (gcc-4.4.6 установлен в / opt):

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 меняется, но он должен находиться в том же каталоге, что и исполняемый файл nvcc .

Это немного взломать, поскольку nvcc.profile не предназначен для настройки пользователя в соответствии с руководством по nvcc, но это решение было наилучшим для меня.

2
ответ дан Ewerton 16 August 2018 в 05:20
поделиться
  • 1
    Я предлагаю сделать это, но указывая путь к каталогу с g ++, символически привязанным к правильной версии gcc (особенно полезно, если ваш дистрибутив поддерживает поддерживаемую версию gcc). Например: mkdir /usr/local/bin/cuda-hack && ln -s /usr/bin/g++-5 /usr/local/bin/cuda-hack – Sami Liedes 9 June 2017 в 21:00

В $CUDA_HOME/include/host_config.h найдите такие строки (они могут незначительно меняться между разными версиями CUDA):

//...
#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) <]
//...

Удалите или измените их, соответствующие вашему условию.

Обратите внимание на этот метод является потенциально опасным и может нарушить вашу сборку. Например, gcc 5 использует C ++ 11 по умолчанию, однако это не относится к nvcc с CUDA 7.5. Обходным путем является добавление

--Xcompiler="--std=c++98" для CUDA & lt; = 6.5

или

--std=c++11 для CUDA> = 7.0.

0
ответ дан Kh40tiK 16 August 2018 в 05:20
поделиться

Проверьте , как использовать «update-alternatives» , чтобы обойти эту проблему:

... Если вы установите gcc 4.6, вы также можете использовать обновление -alternatives, чтобы легко переключаться между версиями. Это можно настроить с помощью:

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
6
ответ дан Leigh 16 August 2018 в 05:20
поделиться

При использовании cmake для меня ни один из файлов редактирования файлов и ссылки не работал, поэтому я скомпилирован с использованием флагов, которые указывают версию gcc / g ++. cmake -DCMAKE_C_COMPILER=gcc-6 -DCMAKE_CXX_COMPILER=g++-6 ..

Работал как шарм.

1
ответ дан markroxor 16 August 2018 в 05:20
поделиться
  • 1
    Ха-ха, я собирался попытаться связать свой ответ с другим вопросом здесь, потому что я думал, что нужно положить эту тему. Хорошая работа снова! благодаря – MikeDoho 24 July 2018 в 02:46
  • 2
    Следует воздержаться от публикации дублирующих ответов на SO, но у меня не было выбора. :) – markroxor 24 July 2018 в 06:38

В большинстве дистрибутивов у вас есть возможность установить еще одну версию gcc и g ++ у самого последнего компилятора, такого как gcc-4.7. Кроме того, большинство систем сборки знают о переменных среды CC и CXX, которые позволяют указать другие компиляторы C и C ++ соответственно. Я предлагаю что-то вроде:

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

Для Make-файлов должен быть аналогичный способ. Я не рекомендую устанавливать настраиваемые символические ссылки в / usr / local, если вы не знаете, что делаете.

4
ответ дан math 16 August 2018 в 05:20
поделиться

Для CUDA7.5 эти линии работают:

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++
10
ответ дан neouyghur 16 August 2018 в 05:20
поделиться

Решение Gearoid Murphy работает лучше для меня, так как на моем дистрибутиве (Ubuntu 11.10) gcc-4.4 и gcc-4.6 находятся в одном каталоге, поэтому -compiler-bindir не помогает. Единственное предостережение - мне также пришлось установить g ++ - 4.4 и symlink также:

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++
23
ответ дан Nicu Stiurca 16 August 2018 в 05:20
поделиться

gcc 4.5 и 4.6 не поддерживаются с CUDA - код не будет компилироваться, а остальная часть инструментальной цепочки, включая cuda-gdb, не будет работать должным образом. Вы не можете использовать их, и ограничение не подлежит обсуждению.

Единственное решение - установить версию gcc 4.4 в качестве второго компилятора (это позволит большинство дистрибутивов). Существует опция nvcc --compiler-bindir, которая может использоваться для указания на альтернативный компилятор. Создайте локальный каталог, а затем создайте символические ссылки на поддерживаемые исполняемые файлы версии gcc. Передайте этот локальный каталог в nvcc через опцию --compiler-bindir, и вы сможете скомпилировать код CUDA, не затрагивая остальную часть вашей системы.


EDIT:

Примечание. что этот вопрос и ответ относятся к CUDA 4. Так как это было написано, NVIDIA продолжала расширять поддержку более поздних версий gcc в новой версии CUDA toolchain

  • Начиная с выпуска 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 полностью поддерживается, с поддержкой 4.9 на Ubuntu 14.04 и Fedora 21.
  • Начиная с выпуска CUDA 7.5, gcc 4.8 полностью поддерживается, поддержка 4.9 на Ubuntu 14.04 и Fedora 21.
  • Начиная с выпуска CUDA 8, gcc 5.3 полностью поддерживается на Ubuntu 16.06 и Fedora 23.
  • Начиная с выпуска CUDA 9, gcc 6 полностью поддерживается на Ubuntu 16.04, Ubuntu 17.04 и Fedora 25.
  • CUDA 9.2 релиз добавляет поддержку gcc 7

В настоящее время (с CUDA 9) отсутствует поддержка gcc 8 в CUDA.

Обратите внимание, что недавно NVIDIA добавила очень полезную таблицу здесь , который содержит поддерживаемый компилятор и матрицу ОС для текущего выпуска CUDA.

43
ответ дан talonmies 16 August 2018 в 05:20
поделиться
  • 1
    Любая идея, что используется для CUDA 7.5? – GuySoft 13 January 2016 в 12:53
  • 2
    Я использую CUDA 7.5 с gcc 4.9.3 на SLES 11 SP3 без каких-либо проблем. – Al Bundy 6 February 2016 в 14:26
  • 3
    Какие? Как код не должен компилироваться с более высокими версиями (за исключением жестко заданных ограничений, конечно) ? Единственное, что я могу придумать, это то, что, поскольку в некоторых версиях C11 / C ++ 11 по умолчанию активированы, но если это вызывает проблему со старым кодом, это может быть легко обмануто с помощью командной строки. – Hi-Angel 11 February 2016 в 12:38
  • 4
    Seconding @ Hi-Angel. #talonmies, что означает "ограничение не подлежит обсуждению". даже означает? Более новые версии gcc и gdb поддерживают более старые двоичные заголовки для объектных файлов, так как они «всегда». (вроде) есть, нет причин, по которым новые версии gcc не должны работать. Отказ от ссылок на Symlinking, любая другая проблема, скорее всего, является параметром флага версии препроцессора c, и если тест версии gcc является «жестко запрограммированным», в каком-то заголовке cuda как часть определения или макроса, его достаточно легко исправить. Исключением может быть сам компилятор cuda gpu. – Beracah 28 November 2016 в 20:35
  • 5
    Это не вопрос двоичной совместимости. Инструментарий CUDA требует, чтобы nvcc и парсер переднего конца GPU могли перехватывать и перегружать различные внутренние заголовки компилятора и libc / libc ++, чтобы скомпилировать код хоста и устройства и объединить их вместе. Парсер CUDA должен иметь возможность правильно анализировать внутренние заголовки gcc, среди прочего. Непроверенные версии gcc могут и не срабатывают, независимо от препроцессорных охранников, встроенных в заголовки NVIDIA. Вы можете или поверить мне (как кто-то, кто взламывал инструментарий CUDA почти 10 лет), или нет. На данный момент я действительно не – talonmies 28 November 2016 в 21:33

Мне пришлось установить более старые версии gcc, g ++.

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

Убедитесь, что gcc-4.4 находится в / usr / bin /, а также для g ++. Тогда я мог бы использовать вышеприведенное решение:

    sudo ln -s /usr/bin/gcc-4.4 /opt/cuda/bin/gcc
    sudo ln -s /usr/bin/g++-4.4 /opt/cuda/bin/g++
2
ответ дан travelingbones 16 August 2018 в 05:20
поделиться
  • 1
    Когда я пытаюсь выполнить эту команду, он говорит «Файл существует». и не выполняет ссылку. Любая помощь ? – Sentient07 25 May 2016 в 20:28
  • 2
    Боюсь, я слишком далек от размышлений об этом, чтобы знать, что сказать. Надеюсь, другие могут помочь. – travelingbones 27 May 2016 в 16:08
Другие вопросы по тегам:

Похожие вопросы: