2016-12-19 2 views
3

Недавно я построил более старую версию GCC и установил ее в своем домашнем каталоге (спецификация ~/local/gcc-5.3.0). Однако мне нужен этот компилятор только для проектов CUDA, и он будет работать с системным компилятором (GCC 6.2.1) в остальное время. Поэтому, я думаю, мне нужно найти способ переключения между ними по мере необходимости и таким образом, который также изменяет библиотеку и включает пути соответствующим образом.Переключение между различными версиями GCC

Я понимаю, что update-alternatives - это один из способов сделать это, но, похоже, требуется установить права root, которых у меня нет.

Следующая лучшая вещь может быть, чтобы написать функцию оболочки в .bashrc, что обеспечивает:

  • Каждая коммутаторами вызовов между системой и локальной НКУ

  • Всякий раз, когда переключатель сделан, он регулирует путей, так что, когда выбран локальный gcc, он сначала ищет файлы заголовков и библиотеки, которые были установлены сами по себе, прежде чем искать в системных путях, например /usr/local/include или usr/local/lib. Предыдущий answer предполагает, что модификации LD_LIBRARY_PATH должно быть достаточно, потому что установка GCC «знает», где есть собственные файлы заголовков и статические библиотеки (я не уверен, что это правильно, я думал, что мне может понадобиться изменить CPATH и т. Д.).

Это лучший способ достичь этого? Если да, то какие пути я должен задать при реализации такой функции?

+0

Мой личный подход к этому не очень сложный: у меня есть сценарий оболочки, который просто добавляет CUDA bin dir и соответствующий gcc bin dir до $ PATH. На самом деле у меня есть несколько сценариев, чтобы поддерживать разные версии CUDA. Когда я перестаю работать с CUDA или хочу перейти на другую версию, я открываю новую оболочку. – tera

+0

Вы упомянули о добавлении только каталога 'bin' из gcc в' PATH'. Разве также не нужно изменять 'LD_LIBRARY_PATH', если не включить каталоги? – rahul1210

+1

Оба nvcc и gcc знают, где находятся их библиотеки, поэтому достаточно просто изменить $ PATH. – tera

ответ

1

Это лучший способ достичь этого? Если да, то какие пути следует устанавливать при реализации такой функции?

Как указывалось другими, PATH и LD_LIBRARY_PATH являются обязательными. Вы можете также обновить MANPATH для полноты.

Вместо того, чтобы изобретать колесо в .bashrc Я предлагаю использовать малоизвестные, но чрезвычайно удобные и модульные Environment Modules, которые были предназначены для этой конкретной цели. Вы можете использовать их как (после настройки конфигурации для gcc/3.1.1):

$ module load gcc/3.1.1 
$ which gcc 
/usr/local/gcc/3.1.1/linux/bin/gcc 
$ module unload gcc 
$ which gcc 
gcc not found 
+0

Кажется, это отличный инструмент для настройки переменных среды оболочки. Теперь просто нужно выяснить, как на самом деле написать файл модуля для моей цели. Спасибо за вашу помощь. – rahul1210

Смежные вопросы