Вопрос или проблема
У меня есть доступ к кластеру с CentOS 7, на котором установлен gcc. К сожалению, версия gcc довольно старая (4.8) и является несовместимой с некоторыми Python-пакетами, которые я использую, требующими версию >5.0. Однако, поскольку у меня нет привилегий root, я не могу просто установить или удалить что-либо.
Я следовал некоторым ответам из Stack Exchange, установив gcc 8.4 из исходного кода. Команда make install
, кажется, выполнена успешно.
Затем я следовал принятому ответу на один из вопросов здесь (Как установить версию gcc по умолчанию только для одного пользователя?), чтобы изменить версию по умолчанию. Однако это не работает для меня.
- gcc 8.4 находится в
$HOME/gcc_8_4
с (по-видимому, правильно работающей) символической ссылкой$HOME/bin/gcc
. - gcc 4.8 находится в
/usr/local/bin
. $HOME/bin
идет перед/usr/local/bin
вPATH
, как указано в упомянутом ответе.- Если я вызываю
./gcc --version
из директории$HOME/bin/gcc/bin
, я получаю версию 8.4. Если я вызываюgcc --version
из любого местоположения, я все еще получаю 4.8.
Итак, что-то изменилось с тех пор, как был опубликован тот ответ? Почему версия 4.8 принимается по умолчанию, несмотря на то, что она находится после версии 8.4 в PATH
? Есть ли способ это исправить?
Недостаточно репутации, чтобы прокомментировать, но в вашем пункте 4 указано $HOME/bin/gcc/bin
. Это правильно или вы имели в виду $HOME/bin/
?
Если первое правильно, то ваш PATH
явно некорректен, так как он не содержит подкаталог gcc/bin
, и похоже, что вы могли добавить лишний слой подкаталогов (подкаталог gcc/
) в $HOME/bin
при создании символической ссылки.
В этом случае либо уберите лишний слой (создайте символические ссылки на все исполняемые файлы из каталога $HOME/gcc_8_4/
в $HOME/bin
), либо отрегулируйте ваш PATH
, чтобы включить $HOME/bin/gcc/bin
.
Ответ или решение
Вопрос о смене версии GCC на CentOS 7 без прав суперпользователя звучит достаточно сложно, особенно в контексте, когда уже предприняты определенные действия для установки новой версии компилятора. Преобладающая проблема же заключается в том, что несмотря на предполагаемую правильную настройку переменной PATH, всё ещё используется старая версия GCC. Давайте разберём данную ситуацию с технической точки зрения и добьёмся корректной работы.
Теоретический аспект (Theory)
На уровень пользователя, проблемы с версией GCC в CentOS 7 могут объясняться несколькими факторами. Первый ключевой аспект заключается в понимании, как система находит исполняемые файлы:
-
Переменная PATH: Это переменная окружения, которую Unix-подобные системы используют для определения путей поиска исполняемых файлов. Когда вводится команда, система ищет исполнимые файлы по заданным в переменной PATH путям слева направо.
-
Символические ссылки: Они позволяют перенаправлять системные вызовы файлов на другие местонахождения. Это может быть полезно для указания на конкретные версии программ в простом и удобочитаемом виде.
-
Унаследованное программное окружение и скрипты логина: Эти элементы часто могут вносить изменения в переменную PATH каждый раз при входе в систему.
На основании изложенной информации, элементарным шагом для пользователя является обеспечение правильного порядка путей в переменной PATH и корректная настройка символических ссылок.
Пример (Example)
Ситуация, описанная в вопросе, демонстрирует следующие шаги:
-
Установка GCC 8.4: Установлена из исходных кодов и размещена в каталоге
$HOME/gcc_8_4
. -
Создание символической ссылки: Ссылка на новую версию GCC была создана в каталоге
$HOME/bin
. -
Настройка PATH: Путь
$HOME/bin
установлен перед/usr/local/bin
, однако старая версия всё еще используется.
Применение (Application)
Для решения этой проблемы, выполним следующие шаги:
-
Проверка структуры каталогов:
Убедитесь, что все бинарные файлы GCC из каталога$HOME/gcc_8_4/bin
корректно ссылаются в$HOME/bin
. Можно использовать командуls -l $HOME/bin/
для проверки корректности символических ссылок. -
Обновление PATH:
Удостоверьтесь, что переменная окружения PATH действительно изменена в текущем сеансе командой:export PATH="$HOME/bin:$PATH"
Эту строчку следует добавить в ваш файл
~/.bashrc
или~/.bash_profile
для автоматического применения настроек при каждом запуске сеанса. -
Проверка изменений:
После внесения изменений перезапустите терминал или примените изменения с помощью:source ~/.bashrc
Затем проверьте текущую используемую версию GCC:
gcc --version
-
Диагностика ошибок:
Если все вышеперечисленные шаги не привели к успеху, проверьте наличие скрытых переменных или скриптов, которые могут изменять PATH. Это могут быть файлы или скрипты на уровне системы либо пользовательские конфигурационные файлы. -
Локальная установка GCC альтернативным путём:
Если сложность сохраняется, рассмотрите использование инструмента "gcc-selector" или его аналоги, которые позволяют легко переключаться между различными версиями компилятора. Однако их установка и использование может потребовать дополнительных действий, таких как модификация ваших локальных конфигураций без корневого доступа.
В рассмотренной ситуации акцентировалось внимание на точности процесса настройки окружения и символьных ссылок, поскольку малейшая ошибка в этих аспектах может привести к неверному определению используемой версии GCC. Придерживаясь предложенной последовательности и внимательно перепроверяя каждый шаг, можно эффективно управлять версиями компилятора даже в условиях ограниченного доступа.