Как изменить версию gcc без прав root на CentOS 7

Вопрос или проблема

У меня есть доступ к кластеру с CentOS 7, на котором установлен gcc. К сожалению, версия gcc довольно старая (4.8) и является несовместимой с некоторыми Python-пакетами, которые я использую, требующими версию >5.0. Однако, поскольку у меня нет привилегий root, я не могу просто установить или удалить что-либо.

Я следовал некоторым ответам из Stack Exchange, установив gcc 8.4 из исходного кода. Команда make install, кажется, выполнена успешно.

Затем я следовал принятому ответу на один из вопросов здесь (Как установить версию gcc по умолчанию только для одного пользователя?), чтобы изменить версию по умолчанию. Однако это не работает для меня.

  1. gcc 8.4 находится в $HOME/gcc_8_4 с (по-видимому, правильно работающей) символической ссылкой $HOME/bin/gcc.
  2. gcc 4.8 находится в /usr/local/bin.
  3. $HOME/bin идет перед /usr/local/bin в PATH, как указано в упомянутом ответе.
  4. Если я вызываю ./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 могут объясняться несколькими факторами. Первый ключевой аспект заключается в понимании, как система находит исполняемые файлы:

  1. Переменная PATH: Это переменная окружения, которую Unix-подобные системы используют для определения путей поиска исполняемых файлов. Когда вводится команда, система ищет исполнимые файлы по заданным в переменной PATH путям слева направо.

  2. Символические ссылки: Они позволяют перенаправлять системные вызовы файлов на другие местонахождения. Это может быть полезно для указания на конкретные версии программ в простом и удобочитаемом виде.

  3. Унаследованное программное окружение и скрипты логина: Эти элементы часто могут вносить изменения в переменную PATH каждый раз при входе в систему.

На основании изложенной информации, элементарным шагом для пользователя является обеспечение правильного порядка путей в переменной PATH и корректная настройка символических ссылок.

Пример (Example)

Ситуация, описанная в вопросе, демонстрирует следующие шаги:

  1. Установка GCC 8.4: Установлена из исходных кодов и размещена в каталоге $HOME/gcc_8_4.

  2. Создание символической ссылки: Ссылка на новую версию GCC была создана в каталоге $HOME/bin.

  3. Настройка PATH: Путь $HOME/bin установлен перед /usr/local/bin, однако старая версия всё еще используется.

Применение (Application)

Для решения этой проблемы, выполним следующие шаги:

  1. Проверка структуры каталогов:
    Убедитесь, что все бинарные файлы GCC из каталога $HOME/gcc_8_4/bin корректно ссылаются в $HOME/bin. Можно использовать команду ls -l $HOME/bin/ для проверки корректности символических ссылок.

  2. Обновление PATH:
    Удостоверьтесь, что переменная окружения PATH действительно изменена в текущем сеансе командой:

    export PATH="$HOME/bin:$PATH"

    Эту строчку следует добавить в ваш файл ~/.bashrc или ~/.bash_profile для автоматического применения настроек при каждом запуске сеанса.

  3. Проверка изменений:
    После внесения изменений перезапустите терминал или примените изменения с помощью:

    source ~/.bashrc

    Затем проверьте текущую используемую версию GCC:

    gcc --version
  4. Диагностика ошибок:
    Если все вышеперечисленные шаги не привели к успеху, проверьте наличие скрытых переменных или скриптов, которые могут изменять PATH. Это могут быть файлы или скрипты на уровне системы либо пользовательские конфигурационные файлы.

  5. Локальная установка GCC альтернативным путём:
    Если сложность сохраняется, рассмотрите использование инструмента "gcc-selector" или его аналоги, которые позволяют легко переключаться между различными версиями компилятора. Однако их установка и использование может потребовать дополнительных действий, таких как модификация ваших локальных конфигураций без корневого доступа.

В рассмотренной ситуации акцентировалось внимание на точности процесса настройки окружения и символьных ссылок, поскольку малейшая ошибка в этих аспектах может привести к неверному определению используемой версии GCC. Придерживаясь предложенной последовательности и внимательно перепроверяя каждый шаг, можно эффективно управлять версиями компилятора даже в условиях ограниченного доступа.

Оцените материал
Добавить комментарий

Капча загружается...