Как изменить компилятор GCC по умолчанию в Ubuntu? - PullRequest
85 голосов
/ 20 октября 2011

Я установил gcc-3.3 / g ++ - 3.3 на ubuntu 11.04, в котором уже есть gcc / g ++ - 4.4.Так что в моей системе доступны как gcc-3.3, так и 4.4.Я могу вызывать оба компилятора так, как хочу.Если я просто вызову команду gcc, то будет вызван gcc-4.4.Чтобы вызвать gcc-3.3, я должен использовать команду gcc-3.3.

Как я могу изменить компилятор по умолчанию на gcc-3.3?Когда я выполняю команду gcc, она должна вызывать gcc-3.3, а не gcc-4.4.

Кроме того, как я могу изменить переменную CXX в файле make на gcc-3.3?Я хочу изменить одно общее глобальное место в системе вместо изменения всех файлов make.

Ответы [ 8 ]

101 голосов
/ 20 октября 2011

Как подсказал @Tommy, вы должны использовать update-alternatives.
Он присваивает значения каждому программному обеспечению семейства, чтобы определить порядок, в котором будут вызываться приложения.

Используется для поддержки разных версий одного и того же программного обеспечения в системе. В вашем случае вы сможете использовать несколько склонений gcc, и одно из них будет предпочтительным.

Чтобы выяснить текущие приоритеты gcc, введите команду, указанную в комментарии @ tripleee:

update-alternatives --query gcc

Теперь обратите внимание на приоритет, приписываемый gcc-4.4, потому что вам нужно присвоить более высокий приоритет gcc-3.3.
Чтобы установить альтернативы, у вас должно быть что-то вроде (при условии, что ваша gcc установка находится в /usr/bin/gcc-3.3, а приоритет gcc-4.4 меньше 50) :

update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-3.3 50

- изменить -

Наконец, вы также можете использовать интерактивный интерфейс update-alternatives для простого переключения между версиями. Введите update-alternatives --config gcc, чтобы вас попросили выбрать версию gcc, которую вы хотите использовать среди установленных.

- редактировать 2 -

Теперь, чтобы исправить переменную среды CXX в масштабе всей системы, вам нужно поместить строку, обозначенную @ DipSwitch's, в ваш файл .bashrc (это применимо только к вашему пользователю, что, на мой взгляд, безопаснее):

echo 'export CXX=/usr/bin/gcc-3.3' >> ~/.bashrc
66 голосов
/ 02 февраля 2012

Вот полный пример ответа jHackTheRipper для толпы TL; DR. :-) В этом случае я хотел запустить g ++ - 4.5 в системе Ubuntu, по умолчанию - 4.6. Как root:

apt-get install g++-4.5
update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.6 100
update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.5 50
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.6 100
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.5 50
update-alternatives --install /usr/bin/cpp cpp-bin /usr/bin/cpp-4.6 100
update-alternatives --install /usr/bin/cpp cpp-bin /usr/bin/cpp-4.5 50
update-alternatives --set g++ /usr/bin/g++-4.5
update-alternatives --set gcc /usr/bin/gcc-4.5
update-alternatives --set cpp-bin /usr/bin/cpp-4.5

Здесь 4.6 по-прежнему по умолчанию (он же «автоматический режим»), но я временно временно переключаюсь на 4.5 (ручной режим). Чтобы вернуться к 4.6:

update-alternatives --auto g++
update-alternatives --auto gcc
update-alternatives --auto cpp-bin

(Обратите внимание на использование cpp-bin вместо cpp. В Ubuntu уже есть альтернатива cpp с мастер-ссылкой /lib/cpp. Переименование этой ссылки приведет к удалению ссылки /lib/cpp, что может привести к поломке скриптов .)

19 голосов
/ 13 марта 2014

Это отличное описание и пошаговая инструкция по созданию и управлению альтернативами master и slave (gcc и g ++).

Вскоре это:

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
7 голосов
/ 24 января 2015

Теперь для Ubuntu / точный доступен gcc-4.9.

Создайте группу альтернатив компилятора, где компилятор дистрибутива имеет более высокий приоритет:

root$ VER=4.6 ; PRIO=60
root$ update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-$VER $PRIO --slave /usr/bin/g++ g++ /usr/bin/g++-$VER
root$ update-alternatives --install /usr/bin/cpp cpp-bin /usr/bin/cpp-$VER $PRIO

root$ VER=4.9 ; PRIO=40
root$ update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-$VER $PRIO --slave /usr/bin/g++ g++ /usr/bin/g++-$VER
root$ update-alternatives --install /usr/bin/cpp cpp-bin /usr/bin/cpp-$VER $PRIO

ПРИМЕЧАНИЕ: версия g ++ изменяется автоматически с помощью переключателя версии gcc. cpp-bin должен выполняться отдельно, так как существует альтернатива master cpp.

Список доступных альтернатив компилятора:

root$ update-alternatives --list gcc
root$ update-alternatives --list cpp-bin

Чтобы вручную выбрать версию 4.9 для gcc, g ++ и cpp, выполните:

root$ update-alternatives --config gcc
root$ update-alternatives --config cpp-bin

Проверка версий компилятора:

root$ for i in gcc g++ cpp ; do $i --version ; done

Восстановление настроек компилятора дистрибутива (здесь: обратно к v4.6):

root$ update-alternatives --auto gcc
root$ update-alternatives --auto cpp-bin
6 голосов
/ 27 мая 2017

Между 4.8 и 6 со всеми --slaves:

update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 \
                    10 \
                    --slave   /usr/bin/cc cc /usr/bin/gcc-4.8 \
                    --slave   /usr/bin/c++ c++ /usr/bin/g++-4.8 \
                    --slave   /usr/bin/g++ g++ /usr/bin/g++-4.8 \
                    --slave   /usr/bin/gcov gcov /usr/bin/gcov-4.8 \
                    --slave   /usr/bin/gcov-dump gcov-dump /usr/bin/gcov-dump-4.8 \
                    --slave   /usr/bin/gcov-tool gcov-tool /usr/bin/gcov-tool-4.8 \
                    --slave   /usr/bin/gcc-ar gcc-ar /usr/bin/gcc-ar-4.8 \
                    --slave   /usr/bin/gcc-nm gcc-nm /usr/bin/gcc-nm-4.8 \
                    --slave   /usr/bin/gcc-ranlib gcc-ranlib /usr/bin/gcc-ranlib-4.8

и

update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-6 \
                    15 \
                    --slave   /usr/bin/cc cc /usr/bin/gcc-6 \
                    --slave   /usr/bin/c++ c++ /usr/bin/g++-6 \
                    --slave   /usr/bin/g++ g++ /usr/bin/g++-6 \
                    --slave   /usr/bin/gcov gcov /usr/bin/gcov-6 \
                    --slave   /usr/bin/gcov-dump gcov-dump /usr/bin/gcov-dump-6 \
                    --slave   /usr/bin/gcov-tool gcov-tool /usr/bin/gcov-tool-6 \
                    --slave   /usr/bin/gcc-ar gcc-ar /usr/bin/gcc-ar-6 \
                    --slave   /usr/bin/gcc-nm gcc-nm /usr/bin/gcc-nm-6 \
                    --slave   /usr/bin/gcc-ranlib gcc-ranlib /usr/bin/gcc-ranlib-6

Переключайтесь между ними с помощью update-alternatives --config gcc.

1 голос
/ 18 августа 2016

Я обнаружил эту проблему при попытке установить новый компилятор clang.Оказывается, что оба Debian и сопровождающие LLVM согласны , что альтернативная система должна использоваться для альтернатив, НЕ для версий .

Предлагаемое ими решение выглядит примерно так:
PATH=/usr/lib/llvm-3.7/bin:$PATH
, где /usr/lib/llvm-3.7/bin - это каталог, созданный пакетом llvm-3.7, и которыйсодержит все инструменты с их именами без суффиксов.При этом llvm-config (версия 3.7) появляется с простым именем в вашей переменной PATH.Нет необходимости возиться с символическими ссылками или вызывать llvm-config-3.7, установленный в /usr/bin.

. Также проверьте наличие пакета с именем llvm-defaults (или gcc-defaults),может предложить другой способ сделать это (я не использовал его).

1 голос
/ 28 февраля 2016

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

  • введите echo $PATH и найдите каталог personal с очень высоким приоритетом (в моем случае у меня есть ~/.local/bin);
  • добавьте символические ссылки в этот каталог:

Например:

ln -s /usr/bin/gcc-WHATEVER ~/.local/bin/gcc
ln -s /usr/bin/g++-WHATEVER ~/.local/bin/g++

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

0 голосов
/ 10 января 2017

Я использовал только строки ниже, и это сработало. Я просто хотел скомпилировать VirtualBox и VMWare WorkStation, используя kernel 4.8.10 на Ubuntu 14.04. Первоначально большинство вещей не работали, например, графика и сети. Мне повезло, что VMWare workstation запросил gcc 6.2.0. Я не смог запустить Genymotion Android emulators, потому что virtualbox не работал. При необходимости опубликую результаты позже.

VER=4.6 ; PRIO=60
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-$VER $PRIO --slave /usr/bin/g++ g++ /usr/bin/g++-$VER
VER=6 ; PRIO=50
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-$VER $PRIO --slave /usr/bin/g++ g++ /usr/bin/g++-$VER
VER=4.8 ; PRIO=40
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-$VER $PRIO --slave /usr/bin/g++ g++ /usr/bin/g++-$VER
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...