Поэтому я установил gcc-4.4 и gcc-4.3 (то же самое для g ++). Теперь, насколько я помню, в Ubuntu есть инструмент, который устанавливает символические ссылки для вас, если вы просто скажете ему, какую версию вы хотите. Однако он не работает в новейшей версии, что меня разочаровывает.
root@nexus:~# update-alternatives --config gcc
update-alternatives: error: no alternatives for gcc.
root@nexus:~# update-alternatives --config cc
There is only one alternative in link group cc: /usr/bin/gcc
Nothing to configure.
root@nexus:~# dpkg -l | grep gcc | awk '{print $2}'
gcc
gcc-4.3
gcc-4.3-base
gcc-4.3-multilib
gcc-4.4
gcc-4.4-base
gcc-4.4-multilib
gcc-4.5-base
gcc-multilib
lib32gcc1
libgcc1
Есть идеи?
Ответы:
Сначала стерли текущую установку альтернатив обновлений для gcc и g ++:
Установить пакеты
Похоже, что и gcc-4.3, и gcc-4.4 устанавливаются после установки build-essential. Однако мы можем явно установить следующие пакеты:
Установить альтернативы
Символические ссылки cc и c ++ установлены по умолчанию. Мы установим символьные ссылки для gcc и g ++, затем свяжем cc и c ++ с gcc и g ++ соответственно. (Обратите внимание, что параметры
10
,20
и30
являются приоритетами для каждой альтернативы.)Настроить альтернативы
Последний шаг - настройка команд по умолчанию для gcc, g ++. Можно легко переключаться между 4.3 и 4.4 в интерактивном режиме:
Или переключитесь с помощью скрипта:
источник
выполнить в терминале:
Итак, эта часть довольно проста. Сложность в том, что когда вы запускаете команду GCC, это фактически символическая ссылка на какую-либо версию GCC, которую вы используете. Это означает, что мы можем создать символическую ссылку от GCC к любой версии GCC, которую мы хотим.
источник
Это действительно желательно? Есть изменения ABI между
gcc
версиями. Компиляция чего-либо с одной версией (например, всей операционной системы), а затем компиляция чего-то другого с другой версией может вызвать конфликт.Например, модули ядра всегда должны быть скомпилированы с той же версией, которая
gcc
использовалась для компиляции ядра. Помня об этом, если вы вручную изменили символическую ссылку между/usr/bin/gcc
версией Ubuntu и версией, используемой в вашей версии, будущие модули, созданные в DKMS, могут использовать неправильнуюgcc
версию.Если вы просто хотите создавать вещи с другой версией
gcc
, это достаточно просто, даже с makecripts. Например, вы можете передать версиюgcc
вCC
переменной среды:Вам может не понадобиться это в команде make (обычно это настраивают скрипты configure), но это не повредит.
источник
gcc
не является частьюalternatives
системы и почему это не особенно желательно. Если ни один из них не передумает, просто сделайте это вручную.$ sudo apt-get install gcc-6 gcc-7 $ CC="gcc-7" ./configure <much output> $ make # uses gcc-7
Принимая во вниманиеsudo update-alternatives gcc gcc-7
, что вы бы случайно не переключили ABI.Редактировать:
Это предполагает, что вы сначала установили версию, например:
Оригинал:
А вот для тех, кто ленив, есть одна строчка, просто поменяйте номер в конце на нужную вам версию. Это внесет изменения для gcc и / или g ++
В этом примере я перешел на 4,9
В этом примере нет проверок на ошибки, а что нет, поэтому вы можете проверить, что будет запущено, прежде чем запускать его. Просто добавьте эхо перед sudo . Для полноты картины я также предоставлю строку проверки:
Результат проверки должен быть примерно таким:
Вы можете проверить версию после:
Полу подробное объяснение:
источник
Как насчет символической ссылки во временном каталоге:
mkdir x && PATH=$PWD/x:$PATH && ln -s /usr/bin/g++-7 $PWD/x/g++
источник