Я установил 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.
Как предложил @Tommy, вы должны использовать update-alternatives
.
Он присваивает значения каждому программному обеспечению семейства, так что он определяет порядок, в котором будут вызываться приложения.
Он используется для поддержки различных версий одного и того же программного обеспечения в системе. В вашем случае вы сможете использовать несколько declinations 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, в ваш файл .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
Вот полный пример ответа 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
?
Это отличное описание и пошаговая инструкция по созданию и управлению альтернативами 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
Теперь для Ubuntu/exact доступен 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".
Список доступных альтернатив компилятора:
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
Восстановить настройки компилятора дистрибутива (здесь: назад к версии 4.0):
root$ update-alternatives --auto gcc
root$ update-alternatives --auto cpp-bin
Между 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++
, что приводит к ошибке: альтернатива cc не может быть подчиненной gcc: это альтернатива master
Я использовал только строки ниже, и это сработало. Я просто хотел скомпилировать 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
Я нашел эту проблему при попытке установить новый компилятор clang. Оказывается, что Debian и сторонники LLVM согласны, что альтернативная система должна использоваться для альтернатив, а не для версий.
Решение, которое они предлагают, выглядит примерно так:
PATH=/usr/lib/llvm-3.7/bin:$PATH
где /usr/lib/llvm -3.7/bin - это каталог, который был создан пакетом llvm-3.7, и который содержит все инструменты с их именами без суффикса. При этом в вашем PATH появляется llvm-config (версия 3.7) с его простым именем. Не нужно гадать с символическими ссылками и не вызывать llvm-config-3.7, который был установлен в /usr/bin.
Также проверьте пакет с именем llvm-defaults (или gcc-defaults), который может предложить другой способ сделать это (я не использовал его).
Если вам нужен более быстрый (но еще очень чистый) способ его достижения в личных целях (например, если вы хотите создать конкретный проект, имеющий некоторые сильные требования к версии компилятора), просто выполните следующие действия шаги:
echo $PATH
и найдите личный каталог с очень высоким приоритетом (в моем случае у меня есть ~/.local/bin
);Например:
ln -s /usr/bin/gcc-WHATEVER ~/.local/bin/gcc
ln -s /usr/bin/g++-WHATEVER ~/.local/bin/g++
Конечно, это будет работать для одного пользователя (это не системное решение), но, с другой стороны, мне не нравится менять слишком много вещей в моей установке.
CXX=gcc-3.3
илиexport CXX=gcc-3.3
а затемmake
однако, если вы изменили его глобально с помощьюupdate-alternatives
он уже будет использовать gcc-3.3, и в этом нет необходимости.