Я установил 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.
CXX=gcc-3.3
или,export CXX=gcc-3.3
а затем,make
когда вы измените его глобально,update-alternatives
он уже будет использовать gcc-3.3, и это не обязательно.Ответы:
Как предложил @Tommy, вы должны использовать
update-alternatives
.Он присваивает значения каждому программному обеспечению семейства, так что он определяет порядок, в котором приложения будут вызываться.
Он используется для поддержки разных версий одного и того же программного обеспечения в системе. В вашем случае вы сможете использовать несколько склонений
gcc
, и одно будет предпочтительным.Чтобы выяснить текущие приоритеты gcc, введите команду, указанную в комментарии @ tripleee:
Теперь обратите внимание на присвоенный приоритет,
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 в свой
.bashrc
файл (это применит изменение только для вашего пользователя, что, на мой взгляд, безопаснее):echo 'export CXX=/usr/bin/gcc-3.3' >> ~/.bashrc
источник
cc
:root@host:/root# update-alternatives --get-selections | grep '/usr/bin/gcc' cc auto /usr/bin/gcc
update-alternatives --query gcc
, который может не работать, например, в сценарии автоматической подготовки. Кроме того, как сделать это независимым от платформы?Вот полный пример ответа 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
ссылки, что может нарушить работу скриптов.)источник
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-5 100
g++-6
пакета?__builtin
материалом.Это отличное описание и пошаговая инструкция по созданию и управлению альтернативами 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
источник
Между 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
.источник
cc
иc++
линий, которые ошибка причины: альтернативный куб.см не может быть рабом НКУ: это мастер альтернативаТеперь для Ubuntu / precision доступен 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 нужно делать отдельно, так как существует альтернатива "cpp" master.
Перечислите доступные альтернативы компилятора:
root$ update-alternatives --list gcc root$ update-alternatives --list cpp-bin
Чтобы вручную выбрать версию 4.9 gcc, g ++ и cpp, выполните:
Проверить версии компилятора:
root$ for i in gcc g++ cpp ; do $i --version ; done
Восстановить настройки компилятора дистрибутива (здесь: вернуться к v4.6):
root$ update-alternatives --auto gcc root$ update-alternatives --auto cpp-bin
источник
Я обнаружил эту проблему при попытке установить новый компилятор 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), который может предложить другой способ сделать это (я его не использовал).
источник
Если вам нужен более быстрый (но все же очень чистый) способ достижения этой цели для личных целей (например, если вы хотите создать конкретный проект, имеющий строгие требования к версии компилятора), просто выполните следующие шаги:
echo $PATH
и найдите личный каталог с очень высоким приоритетом (в моем случае он есть~/.local/bin
);Например:
Конечно, это будет работать для одного пользователя (это не общесистемное решение), но, с другой стороны, я не люблю менять слишком много вещей в своей установке.
источник
Я использовал только строки ниже, и это сработало. Я просто хотел скомпилировать
VirtualBox
иVMWare WorkStation
использоватьkernel 4.8.10
наUbuntu 14.04
. Изначально не работало большинство вещей, например графика и сети. Мне повезло чтоVMWare workstation
просилgcc 6.2.0
. Я не мог начать свойGenymotion Android emulators
потому что виртуальный бокс не работал. При необходимости опубликую результаты позже.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
источник