Переключение между двумя версиями gcc [duplicate]

Итак, я установил 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

Любые идеи?

178
задан 30 May 2018 в 11:59

45 ответов

Сначала удалили текущую установку обновлений для gcc и g ++:

sudo update-alternatives --remove-all gcc sudo update-alternatives --remove-all g++

Установить пакеты

Кажется, что gcc-4.3 и gcc-4.4 установлены после установки строить-важное значение. Однако мы можем явно установить следующие пакеты:

sudo apt-get install gcc-4.3 gcc-4.4 g++-4.3 g++-4.4

Установить пакеты

Символьные ссылки cc и c ++ установлены по умолчанию. Мы установим ссылки на символы для gcc и g ++, затем свяжемся cc и c ++ с gcc и g ++ соответственно.

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.3 10 sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.4 20 sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.3 10 sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.4 20 sudo update-alternatives --install /usr/bin/cc cc /usr/bin/gcc 30 sudo update-alternatives --set cc /usr/bin/gcc sudo update-alternatives --install /usr/bin/c++ c++ /usr/bin/g++ 30 sudo update-alternatives --set c++ /usr/bin/g++

Configure Alternatives

Последний шаг - настройка команд по умолчанию для gcc , g ++. Легко переключаться между 4.3 и 4.4 в интерактивном режиме:

sudo update-alternatives --config gcc sudo update-alternatives --config g++

Или переключиться с помощью скрипта:

#!/bin/sh if [ -z "$1" ]; then echo "usage: $0 version" 1>&2 exit 1 fi if [ ! -f "/usr/bin/gcc-$1" ] || [ ! -f "/usr/bin/g++-$1" ]; then echo "no such version gcc/g++ installed" 1>&2 exit 1 fi update-alternatives --set gcc "/usr/bin/gcc-$1" update-alternatives --set g++ "/usr/bin/g++-$1"
223
ответ дан 18 July 2018 в 14:09

Сначала удалили текущую установку обновлений для gcc и g ++:

sudo update-alternatives --remove-all gcc sudo update-alternatives --remove-all g++

Установить пакеты

Кажется, что gcc-4.3 и gcc-4.4 установлены после установки строить-важное значение. Однако мы можем явно установить следующие пакеты:

sudo apt-get install gcc-4.3 gcc-4.4 g++-4.3 g++-4.4

Установить пакеты

Символьные ссылки cc и c ++ установлены по умолчанию. Мы установим ссылки на символы для gcc и g ++, затем свяжемся cc и c ++ с gcc и g ++ соответственно.

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.3 10 sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.4 20 sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.3 10 sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.4 20 sudo update-alternatives --install /usr/bin/cc cc /usr/bin/gcc 30 sudo update-alternatives --set cc /usr/bin/gcc sudo update-alternatives --install /usr/bin/c++ c++ /usr/bin/g++ 30 sudo update-alternatives --set c++ /usr/bin/g++

Configure Alternatives

Последний шаг - настройка команд по умолчанию для gcc , g ++. Легко переключаться между 4.3 и 4.4 в интерактивном режиме:

sudo update-alternatives --config gcc sudo update-alternatives --config g++

Или переключиться с помощью скрипта:

#!/bin/sh if [ -z "$1" ]; then echo "usage: $0 version" 1>&2 exit 1 fi if [ ! -f "/usr/bin/gcc-$1" ] || [ ! -f "/usr/bin/g++-$1" ]; then echo "no such version gcc/g++ installed" 1>&2 exit 1 fi update-alternatives --set gcc "/usr/bin/gcc-$1" update-alternatives --set g++ "/usr/bin/g++-$1"
224
ответ дан 24 July 2018 в 20:20

Сначала удалили текущую установку обновлений для gcc и g ++:

sudo update-alternatives --remove-all gcc 
sudo update-alternatives --remove-all g++

Установить пакеты

Кажется, что gcc-4.3 и gcc-4.4 установлены после установки строить-важное значение. Однако мы можем явно установить следующие пакеты:

sudo apt-get install gcc-4.3 gcc-4.4 g++-4.3 g++-4.4

Установить альтернативы

Символьные ссылки cc и c ++ установлены по умолчанию. Мы установим символьные ссылки для gcc и g ++, затем свяжемся cc и c ++ с gcc и g ++ соответственно.

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.3 10
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.4 20

sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.3 10
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.4 20

sudo update-alternatives --install /usr/bin/cc cc /usr/bin/gcc 30
sudo update-alternatives --set cc /usr/bin/gcc

sudo update-alternatives --install /usr/bin/c++ c++ /usr/bin/g++ 30
sudo update-alternatives --set c++ /usr/bin/g++

Configure Alternatives

Последний шаг - настройка команд по умолчанию для gcc , g ++. Легко переключаться между 4.3 и 4.4 в интерактивном режиме:

sudo update-alternatives --config gcc
sudo update-alternatives --config g++

Или переключиться с помощью скрипта:

#!/bin/sh

if [ -z "$1" ]; then
    echo "usage: $0 version" 1>&2
    exit 1
fi

if [ ! -f "/usr/bin/gcc-$1" ] || [ ! -f "/usr/bin/g++-$1" ]; then
    echo "no such version gcc/g++ installed" 1>&2
    exit 1
fi

update-alternatives --set gcc "/usr/bin/gcc-$1"
update-alternatives --set g++ "/usr/bin/g++-$1"
225
ответ дан 31 July 2018 в 23:23

Сначала удалили текущую установку обновлений для gcc и g ++:

sudo update-alternatives --remove-all gcc 
sudo update-alternatives --remove-all g++

Установить пакеты

Кажется, что gcc-4.3 и gcc-4.4 установлены после установки строить-важное значение. Однако мы можем явно установить следующие пакеты:

sudo apt-get install gcc-4.3 gcc-4.4 g++-4.3 g++-4.4

Установить альтернативы

Символьные ссылки cc и c ++ установлены по умолчанию. Мы установим символьные ссылки для gcc и g ++, затем свяжемся cc и c ++ с gcc и g ++ соответственно.

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.3 10
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.4 20

sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.3 10
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.4 20

sudo update-alternatives --install /usr/bin/cc cc /usr/bin/gcc 30
sudo update-alternatives --set cc /usr/bin/gcc

sudo update-alternatives --install /usr/bin/c++ c++ /usr/bin/g++ 30
sudo update-alternatives --set c++ /usr/bin/g++

Configure Alternatives

Последний шаг - настройка команд по умолчанию для gcc , g ++. Легко переключаться между 4.3 и 4.4 в интерактивном режиме:

sudo update-alternatives --config gcc
sudo update-alternatives --config g++

Или переключиться с помощью скрипта:

#!/bin/sh

if [ -z "$1" ]; then
    echo "usage: $0 version" 1>&2
    exit 1
fi

if [ ! -f "/usr/bin/gcc-$1" ] || [ ! -f "/usr/bin/g++-$1" ]; then
    echo "no such version gcc/g++ installed" 1>&2
    exit 1
fi

update-alternatives --set gcc "/usr/bin/gcc-$1"
update-alternatives --set g++ "/usr/bin/g++-$1"
226
ответ дан 2 August 2018 в 18:20

Сначала удалили текущую установку обновлений для gcc и g ++:

sudo update-alternatives --remove-all gcc 
sudo update-alternatives --remove-all g++

Установить пакеты

Кажется, что gcc-4.3 и gcc-4.4 установлены после установки строить-важное значение. Однако мы можем явно установить следующие пакеты:

sudo apt-get install gcc-4.3 gcc-4.4 g++-4.3 g++-4.4

Установить альтернативы

Символьные ссылки cc и c ++ установлены по умолчанию. Мы установим символьные ссылки для gcc и g ++, затем свяжемся cc и c ++ с gcc и g ++ соответственно.

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.3 10
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.4 20

sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.3 10
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.4 20

sudo update-alternatives --install /usr/bin/cc cc /usr/bin/gcc 30
sudo update-alternatives --set cc /usr/bin/gcc

sudo update-alternatives --install /usr/bin/c++ c++ /usr/bin/g++ 30
sudo update-alternatives --set c++ /usr/bin/g++

Configure Alternatives

Последний шаг - настройка команд по умолчанию для gcc , g ++. Легко переключаться между 4.3 и 4.4 в интерактивном режиме:

sudo update-alternatives --config gcc
sudo update-alternatives --config g++

Или переключиться с помощью скрипта:

#!/bin/sh

if [ -z "$1" ]; then
    echo "usage: $0 version" 1>&2
    exit 1
fi

if [ ! -f "/usr/bin/gcc-$1" ] || [ ! -f "/usr/bin/g++-$1" ]; then
    echo "no such version gcc/g++ installed" 1>&2
    exit 1
fi

update-alternatives --set gcc "/usr/bin/gcc-$1"
update-alternatives --set g++ "/usr/bin/g++-$1"
226
ответ дан 3 August 2018 в 20:39

Сначала удалили текущую установку обновлений для gcc и g ++:

sudo update-alternatives --remove-all gcc 
sudo update-alternatives --remove-all g++

Установить пакеты

Кажется, что gcc-4.3 и gcc-4.4 установлены после установки строить-важное значение. Однако мы можем явно установить следующие пакеты:

sudo apt-get install gcc-4.3 gcc-4.4 g++-4.3 g++-4.4

Установить альтернативы

Символьные ссылки cc и c ++ установлены по умолчанию. Мы установим символьные ссылки для gcc и g ++, затем свяжемся cc и c ++ с gcc и g ++ соответственно.

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.3 10
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.4 20

sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.3 10
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.4 20

sudo update-alternatives --install /usr/bin/cc cc /usr/bin/gcc 30
sudo update-alternatives --set cc /usr/bin/gcc

sudo update-alternatives --install /usr/bin/c++ c++ /usr/bin/g++ 30
sudo update-alternatives --set c++ /usr/bin/g++

Configure Alternatives

Последний шаг - настройка команд по умолчанию для gcc , g ++. Легко переключаться между 4.3 и 4.4 в интерактивном режиме:

sudo update-alternatives --config gcc
sudo update-alternatives --config g++

Или переключиться с помощью скрипта:

#!/bin/sh

if [ -z "$1" ]; then
    echo "usage: $0 version" 1>&2
    exit 1
fi

if [ ! -f "/usr/bin/gcc-$1" ] || [ ! -f "/usr/bin/g++-$1" ]; then
    echo "no such version gcc/g++ installed" 1>&2
    exit 1
fi

update-alternatives --set gcc "/usr/bin/gcc-$1"
update-alternatives --set g++ "/usr/bin/g++-$1"
226
ответ дан 5 August 2018 в 05:21

Сначала удалили текущую установку обновлений для gcc и g ++:

sudo update-alternatives --remove-all gcc 
sudo update-alternatives --remove-all g++

Установить пакеты

Кажется, что gcc-4.3 и gcc-4.4 установлены после установки строить-важное значение. Однако мы можем явно установить следующие пакеты:

sudo apt-get install gcc-4.3 gcc-4.4 g++-4.3 g++-4.4

Установить альтернативы

Символьные ссылки cc и c ++ установлены по умолчанию. Мы установим символьные ссылки для gcc и g ++, затем свяжемся cc и c ++ с gcc и g ++ соответственно.

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.3 10
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.4 20

sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.3 10
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.4 20

sudo update-alternatives --install /usr/bin/cc cc /usr/bin/gcc 30
sudo update-alternatives --set cc /usr/bin/gcc

sudo update-alternatives --install /usr/bin/c++ c++ /usr/bin/g++ 30
sudo update-alternatives --set c++ /usr/bin/g++

Configure Alternatives

Последний шаг - настройка команд по умолчанию для gcc , g ++. Легко переключаться между 4.3 и 4.4 в интерактивном режиме:

sudo update-alternatives --config gcc
sudo update-alternatives --config g++

Или переключиться с помощью скрипта:

#!/bin/sh

if [ -z "$1" ]; then
    echo "usage: $0 version" 1>&2
    exit 1
fi

if [ ! -f "/usr/bin/gcc-$1" ] || [ ! -f "/usr/bin/g++-$1" ]; then
    echo "no such version gcc/g++ installed" 1>&2
    exit 1
fi

update-alternatives --set gcc "/usr/bin/gcc-$1"
update-alternatives --set g++ "/usr/bin/g++-$1"
226
ответ дан 6 August 2018 в 22:26

Сначала удалили текущую установку обновлений для gcc и g ++:

sudo update-alternatives --remove-all gcc 
sudo update-alternatives --remove-all g++

Установить пакеты

Кажется, что gcc-4.3 и gcc-4.4 установлены после установки строить-важное значение. Однако мы можем явно установить следующие пакеты:

sudo apt-get install gcc-4.3 gcc-4.4 g++-4.3 g++-4.4

Установить альтернативы

Символьные ссылки cc и c ++ установлены по умолчанию. Мы установим символьные ссылки для gcc и g ++, затем свяжемся cc и c ++ с gcc и g ++ соответственно.

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.3 10
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.4 20

sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.3 10
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.4 20

sudo update-alternatives --install /usr/bin/cc cc /usr/bin/gcc 30
sudo update-alternatives --set cc /usr/bin/gcc

sudo update-alternatives --install /usr/bin/c++ c++ /usr/bin/g++ 30
sudo update-alternatives --set c++ /usr/bin/g++

Configure Alternatives

Последний шаг - настройка команд по умолчанию для gcc , g ++. Легко переключаться между 4.3 и 4.4 в интерактивном режиме:

sudo update-alternatives --config gcc
sudo update-alternatives --config g++

Или переключиться с помощью скрипта:

#!/bin/sh

if [ -z "$1" ]; then
    echo "usage: $0 version" 1>&2
    exit 1
fi

if [ ! -f "/usr/bin/gcc-$1" ] || [ ! -f "/usr/bin/g++-$1" ]; then
    echo "no such version gcc/g++ installed" 1>&2
    exit 1
fi

update-alternatives --set gcc "/usr/bin/gcc-$1"
update-alternatives --set g++ "/usr/bin/g++-$1"
226
ответ дан 9 August 2018 в 02:53

Сначала удалили текущую установку обновлений для gcc и g ++:

sudo update-alternatives --remove-all gcc 
sudo update-alternatives --remove-all g++

Установить пакеты

Кажется, что gcc-4.3 и gcc-4.4 установлены после установки строить-важное значение. Однако мы можем явно установить следующие пакеты:

sudo apt-get install gcc-4.3 gcc-4.4 g++-4.3 g++-4.4

Установить альтернативы

Символьные ссылки cc и c ++ установлены по умолчанию. Мы установим символьные ссылки для gcc и g ++, затем свяжемся cc и c ++ с gcc и g ++ соответственно.

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.3 10
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.4 20

sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.3 10
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.4 20

sudo update-alternatives --install /usr/bin/cc cc /usr/bin/gcc 30
sudo update-alternatives --set cc /usr/bin/gcc

sudo update-alternatives --install /usr/bin/c++ c++ /usr/bin/g++ 30
sudo update-alternatives --set c++ /usr/bin/g++

Configure Alternatives

Последний шаг - настройка команд по умолчанию для gcc , g ++. Легко переключаться между 4.3 и 4.4 в интерактивном режиме:

sudo update-alternatives --config gcc
sudo update-alternatives --config g++

Или переключиться с помощью скрипта:

#!/bin/sh

if [ -z "$1" ]; then
    echo "usage: $0 version" 1>&2
    exit 1
fi

if [ ! -f "/usr/bin/gcc-$1" ] || [ ! -f "/usr/bin/g++-$1" ]; then
    echo "no such version gcc/g++ installed" 1>&2
    exit 1
fi

update-alternatives --set gcc "/usr/bin/gcc-$1"
update-alternatives --set g++ "/usr/bin/g++-$1"
227
ответ дан 14 August 2018 в 21:07
  • 1
    Thx, поэтому вы должны добавить их вручную для альтернативных вариантов обновления. Раньше версии URC UCuntu сделали это автоматически. – Nils 15 February 2011 в 23:33
  • 2
    Это особенно полезно для меня при компиляции модулей nvidia для разных ядер. Большое вам спасибо за объяснение альтернатив обновления – earthmeLon 15 April 2012 в 15:57
  • 3
    Спасибо! Я использовал ваш другой ответ для обновления с 4.6 до 4.7. Я хотел использовать этот ответ, но я не был уверен, почему вы добавляете цифры, как 10 20 30 после некоторых из ваших команд. Не могли бы вы объяснить? – Martin Drozdik 29 December 2012 в 04:02
  • 4
    Цифры являются приоритетами, как выясняется, согласно man-странице. Я предполагаю, что в случае, если одна из версий будет удалена, она будет использовать эти приоритеты, чтобы определить, какой из них должен стать новым значением по умолчанию. – Ibrahim 15 January 2013 в 02:04
  • 5
    @Ibrahim: Нет, они определяют, что выбирается, когда вы выбираете автоматический режим – Cookie 24 March 2014 в 22:25

Изменить:

Предполагается, что вы установили версию сначала, например:

sudo apt install gcc-4.9 g++-4.9

Edit:

И вот один лайнер для тех, кто ленив, просто измените число в конце на нужную вам версию. Он внесет изменения для gcc и / или g ++

ls -la /usr/bin/ | grep -oP "[\S]*(gcc|g\+\+)(-[a-z]+)*[\s]" | xargs bash -c 'for link in ${@:1}; do sudo ln -s -f "/usr/bin/${link}-${0}" "/usr/bin/${link}"; done' 4.9

В этом примере я переключился на 4.9

Нет проверок ошибок и что нет в этом примере, так что вы можете хотите проверить, что будет выполняться до запуска. Просто добавьте gcc перед sudo. Для полноты я также предоставляю контрольную строку:

ls -la /usr/bin/ | grep -oP "[\S]*(gcc|g\+\+)(-[a-z]+)*[\s]" | xargs bash -c 'for link in ${@:1}; do echo sudo ln -s -f "/usr/bin/${link}-${0}" "/usr/bin/${link}"; done' 4.9

Результат проверки должен быть примерно таким:

sudo ln -s -f /usr/bin/g++-4.9 /usr/bin/g++ sudo ln -s -f /usr/bin/gcc-4.9 /usr/bin/gcc sudo ln -s -f /usr/bin/gcc-ar-4.9 /usr/bin/gcc-ar sudo ln -s -f /usr/bin/gcc-nm-4.9 /usr/bin/gcc-nm sudo ln -s -f /usr/bin/gcc-ranlib-4.9 /usr/bin/gcc-ranlib sudo ln -s -f /usr/bin/x86_64-linux-gnu-g++-4.9 /usr/bin/x86_64-linux-gnu-g++ sudo ln -s -f /usr/bin/x86_64-linux-gnu-gcc-4.9 /usr/bin/x86_64-linux-gnu-gcc sudo ln -s -f /usr/bin/x86_64-linux-gnu-gcc-ar-4.9 /usr/bin/x86_64-linux-gnu-gcc-ar sudo ln -s -f /usr/bin/x86_64-linux-gnu-gcc-nm-4.9 /usr/bin/x86_64-linux-gnu-gcc-nm sudo ln -s -f /usr/bin/x86_64-linux-gnu-gcc-ranlib-4.9 /usr/bin/x86_64-linux-gnu-gcc-ranlib

Вы можете проверить версию после:

gcc --version

Полу-подробное объяснение:

ls -la / usr / bin / перечисляет все файлы в / usr / bin | pipe (send) вывод к следующей команде grep -oP соответствует регулярному выражению поиска в строке. o показывает только результат не всей согласованной строки. P сообщает grep использовать perl-regex. Я не буду входить в regex здесь, прочитайте, если хотите. xargs просто кладет, он собирает результаты, которые отправляются на него и отправляют все из них до конца. то есть команде, следующей за xargs bash, это bash. Флаг c говорит ему использовать строку в качестве команды. В этом примере он перебирает аргументы, отправленные из xargs, пропуская первый (0-й) аргумент, в этом случае цикл пропускает 4.9. 0-й аргумент используется в цикле для изменения ссылки. ln -s -f Флаг s создает символическую ссылку, f при необходимости отжимает сначала.
10
ответ дан 18 July 2018 в 14:09

выполнить в терминале:

gcc -v g++ -v

Хорошо, так что часть довольно проста. Сложная часть заключается в том, что когда вы выдаете команду GCC, это на самом деле сиболическая ссылка, к которой вы когда-либо использовали GCC. Это означает, что мы можем создать символическую ссылку от GCC на любую желаемую версию GCC.

Вы можете увидеть символическую ссылку: ls -la /usr/bin | grep gcc-4.4 ls -la /usr/bin | grep g++-4.4 Вы можете увидеть символическую ссылку: rm /usr/bin/gcc rm /usr/bin/g++ ln -s /usr/bin/gcc-4.3 /usr/bin/gcc ln -s /usr/bin/g++-4.3 /usr/bin/g++ Теперь, если мы снова проверим символические ссылки, мы увидим GCC & amp; G ++ теперь связаны с GCC 4.3 и G ++ 4.3: ls -la /usr/bin/ | grep gcc ls -la /usr/bin/ | grep g++ Теперь, если мы снова проверим символические ссылки, мы увидим GCC & amp; G ++ теперь связаны с GCC 4.3 и G ++ 4.3: gcc -v g++ -v
31
ответ дан 18 July 2018 в 14:09

Это действительно желательно? Существуют изменения ABI между версиями gcc. Компиляция чего-либо с одной версией (например, всей операционной системы), а затем компиляция чего-то другого с другой версией может вызвать конфликт.

Например, модули ядра всегда должны быть скомпилированы с той же версией gcc, используемой для компиляции ядра. Имея это в виду, если вы вручную изменили символическую ссылку между /usr/bin/gcc и версией, используемой в вашей версии Ubuntu, будущие модули DKMS могут использовать неправильную версию gcc.

Если вы просто хотите для создания вещей с другой версией gcc, это достаточно просто, даже с помощью скриптов. Например, вы можете передать версию gcc в переменной среды CC:

CC="gcc-4.5" ./configure CC="gcc-4.5" make

Вам может не понадобиться это в команде make (обычно настраивать скрипты), но она не болит.

19
ответ дан 18 July 2018 в 14:09

Рассмотрите одностороннее обновление:

sudo apt install gcc-7 sudo apt remove gcc-5

apt будет обрабатывать ссылки сотрудников автоматически в этом случае. Новая версия C / C ++ довольно совместима. Вам вряд ли понадобится старый.

-1
ответ дан 18 July 2018 в 14:09

Изменить:

Предполагается, что вы установили версию сначала, например:

sudo apt install gcc-4.9 g++-4.9

Edit:

И вот один лайнер для тех, кто ленив, просто измените число в конце на нужную вам версию. Он внесет изменения для gcc и / или g ++

ls -la /usr/bin/ | grep -oP "[\S]*(gcc|g\+\+)(-[a-z]+)*[\s]" | xargs bash -c 'for link in ${@:1}; do sudo ln -s -f "/usr/bin/${link}-${0}" "/usr/bin/${link}"; done' 4.9

В этом примере я переключился на 4.9

Нет проверок ошибок и что нет в этом примере, так что вы можете хотите проверить, что будет выполняться до запуска. Просто добавьте gcc перед sudo. Для полноты я также предоставляю контрольную строку:

ls -la /usr/bin/ | grep -oP "[\S]*(gcc|g\+\+)(-[a-z]+)*[\s]" | xargs bash -c 'for link in ${@:1}; do echo sudo ln -s -f "/usr/bin/${link}-${0}" "/usr/bin/${link}"; done' 4.9

Результат проверки должен быть примерно таким:

sudo ln -s -f /usr/bin/g++-4.9 /usr/bin/g++ sudo ln -s -f /usr/bin/gcc-4.9 /usr/bin/gcc sudo ln -s -f /usr/bin/gcc-ar-4.9 /usr/bin/gcc-ar sudo ln -s -f /usr/bin/gcc-nm-4.9 /usr/bin/gcc-nm sudo ln -s -f /usr/bin/gcc-ranlib-4.9 /usr/bin/gcc-ranlib sudo ln -s -f /usr/bin/x86_64-linux-gnu-g++-4.9 /usr/bin/x86_64-linux-gnu-g++ sudo ln -s -f /usr/bin/x86_64-linux-gnu-gcc-4.9 /usr/bin/x86_64-linux-gnu-gcc sudo ln -s -f /usr/bin/x86_64-linux-gnu-gcc-ar-4.9 /usr/bin/x86_64-linux-gnu-gcc-ar sudo ln -s -f /usr/bin/x86_64-linux-gnu-gcc-nm-4.9 /usr/bin/x86_64-linux-gnu-gcc-nm sudo ln -s -f /usr/bin/x86_64-linux-gnu-gcc-ranlib-4.9 /usr/bin/x86_64-linux-gnu-gcc-ranlib

Вы можете проверить версию после:

gcc --version

Полу-подробное объяснение:

ls -la / usr / bin / перечисляет все файлы в / usr / bin | pipe (send) вывод к следующей команде grep -oP соответствует регулярному выражению поиска в строке. o показывает только результат не всей согласованной строки. P сообщает grep использовать perl-regex. Я не буду входить в regex здесь, прочитайте, если хотите. xargs просто кладет, он собирает результаты, которые отправляются на него и отправляют все из них до конца. то есть команде, следующей за xargs bash, это bash. Флаг c говорит ему использовать строку в качестве команды. В этом примере он перебирает аргументы, отправленные из xargs, пропуская первый (0-й) аргумент, в этом случае цикл пропускает 4.9. 0-й аргумент используется в цикле для изменения ссылки. ln -s -f Флаг s создает символическую ссылку, f при необходимости отжимает сначала.
10
ответ дан 24 July 2018 в 20:20
  • 1
    Очень старый вопрос, но этот ответ кажется одним из драгоценных камней, которые мы должны искать при рассмотрении ответов на старые сообщения ... – mook765 16 October 2016 в 10:12
  • 2
    Brilliant! Лучший ответ раздаст! – Gabriel Staples 15 January 2018 в 08:04

выполнить в терминале:

gcc -v g++ -v

Хорошо, так что часть довольно проста. Сложная часть заключается в том, что когда вы выдаете команду GCC, это на самом деле сиболическая ссылка, к которой вы когда-либо использовали GCC. Это означает, что мы можем создать символическую ссылку от GCC на любую желаемую версию GCC.

Вы можете увидеть символическую ссылку: ls -la /usr/bin | grep gcc-4.4 ls -la /usr/bin | grep g++-4.4 Вы можете увидеть символическую ссылку: rm /usr/bin/gcc rm /usr/bin/g++ ln -s /usr/bin/gcc-4.3 /usr/bin/gcc ln -s /usr/bin/g++-4.3 /usr/bin/g++ Теперь, если мы снова проверим символические ссылки, мы увидим GCC & amp; G ++ теперь связаны с GCC 4.3 и G ++ 4.3: ls -la /usr/bin/ | grep gcc ls -la /usr/bin/ | grep g++ Теперь, если мы снова проверим символические ссылки, мы увидим GCC & amp; G ++ теперь связаны с GCC 4.3 и G ++ 4.3: gcc -v g++ -v
31
ответ дан 24 July 2018 в 20:20

Это действительно желательно? Существуют изменения ABI между версиями gcc. Компиляция чего-либо с одной версией (например, всей операционной системы), а затем компиляция чего-то другого с другой версией может вызвать конфликт.

Например, модули ядра всегда должны быть скомпилированы с той же версией gcc, используемой для компиляции ядра. Имея это в виду, если вы вручную изменили символическую ссылку между /usr/bin/gcc и версией, используемой в вашей версии Ubuntu, будущие модули DKMS могут использовать неправильную версию gcc.

Если вы просто хотите для создания вещей с другой версией gcc, это достаточно просто, даже с помощью скриптов. Например, вы можете передать версию gcc в переменной среды CC:

CC="gcc-4.5" ./configure CC="gcc-4.5" make

Вам может не понадобиться это в команде make (обычно настраивать скрипты), но она не болит.

19
ответ дан 24 July 2018 в 20:20
  • 1
    Thx для вашего комментария. Я знаю переменную CC, но это был не вопрос. – Nils 15 February 2011 в 20:31
  • 2
    Правда, но я объяснил, почему gcc не является частью системы alternatives и почему это не особенно желательно. Если ни один из них не передумает, просто сделайте это вручную. – Oli♦ 15 February 2011 в 20:43
  • 3
    Это было раньше? Теперь они просто удалили его ?! Компиляция (пользовательское) программное обеспечение с различными версиями gcc должна быть в порядке. В этом обсуждении возникает вопрос ... – Nils 15 February 2011 в 22:12
  • 4
    Можете ли вы объяснить, почему переменные окружения для каждого вызова предпочтительнее общесистемного параметра конфигурации? $ 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. – kfsone 13 June 2017 в 01:01

Рассмотрите одностороннее обновление:

sudo apt install gcc-7 sudo apt remove gcc-5

apt будет обрабатывать ссылки сотрудников автоматически в этом случае. Новая версия C / C ++ довольно совместима. Вам вряд ли понадобится старый.

-1
ответ дан 24 July 2018 в 20:20

Изменить:

Предполагается, что вы установили версию сначала, например:

sudo apt install gcc-4.9 g++-4.9

Оригинал:

И вот одно- лайнер для тех, кто ленив, просто измените номер в конце на нужную вам версию. Это приведет к изменению для gcc и / или g ++

ls -la /usr/bin/ | grep -oP "[\S]*(gcc|g\+\+)(-[a-z]+)*[\s]" | xargs bash -c 'for link in ${@:1}; do sudo ln -s -f "/usr/bin/${link}-${0}" "/usr/bin/${link}"; done' 4.9

. В этом примере я переключился на 4.9

. Нет ошибок и что нет в этом примере, так что вы можете хотите проверить, что будет выполняться до запуска. Просто добавьте эхо до sudo. Для полноты я также предоставляю контрольную строку:

ls -la /usr/bin/ | grep -oP "[\S]*(gcc|g\+\+)(-[a-z]+)*[\s]" | xargs bash -c 'for link in ${@:1}; do echo sudo ln -s -f "/usr/bin/${link}-${0}" "/usr/bin/${link}"; done' 4.9

Результат проверки должен выглядеть примерно так:

sudo ln -s -f /usr/bin/g++-4.9 /usr/bin/g++
sudo ln -s -f /usr/bin/gcc-4.9 /usr/bin/gcc
sudo ln -s -f /usr/bin/gcc-ar-4.9 /usr/bin/gcc-ar
sudo ln -s -f /usr/bin/gcc-nm-4.9 /usr/bin/gcc-nm
sudo ln -s -f /usr/bin/gcc-ranlib-4.9 /usr/bin/gcc-ranlib
sudo ln -s -f /usr/bin/x86_64-linux-gnu-g++-4.9 /usr/bin/x86_64-linux-gnu-g++
sudo ln -s -f /usr/bin/x86_64-linux-gnu-gcc-4.9 /usr/bin/x86_64-linux-gnu-gcc
sudo ln -s -f /usr/bin/x86_64-linux-gnu-gcc-ar-4.9 /usr/bin/x86_64-linux-gnu-gcc-ar
sudo ln -s -f /usr/bin/x86_64-linux-gnu-gcc-nm-4.9 /usr/bin/x86_64-linux-gnu-gcc-nm
sudo ln -s -f /usr/bin/x86_64-linux-gnu-gcc-ranlib-4.9 /usr/bin/x86_64-linux-gnu-gcc-ranlib

Вы можете проверить версию после:

gcc --version

Полу-подробное объяснение:

  • ls -la / usr / bin / перечисляет все файлы в / usr / bin
  • | pipe (send) вывод к следующей команде
  • grep -oP соответствует регулярному выражению поиска в строке. o показывает только результат не всей согласованной строки. P сообщает grep использовать perl-regex. Я не буду вдаваться в regex здесь, прочитайте его, если хотите.
  • xargs просто помещается, он собирает результаты, которые отправляются на него и отправляют все из них до конца. т. е. команде, следующей за xargs
  • bash, это bash. Флаг c говорит ему использовать строку в качестве команды. В этом примере он перебирает аргументы, отправленные из xargs, пропуская первый (0-й) аргумент, в этом случае цикл пропускает 4.9. 0-й аргумент используется в цикле для изменения ссылки.
  • ln -s -f Флаг s создает символическую ссылку, f при необходимости отжимает сначала.
10
ответ дан 31 July 2018 в 23:23

выполнить в терминале:

gcc -v
g++ -v

Хорошо, так что часть довольно проста. Сложная часть заключается в том, что когда вы выдаете команду GCC, это на самом деле сиболическая ссылка, к которой вы когда-либо использовали GCC. Это означает, что мы можем создать символическую ссылку от GCC на любую версию GCC, которую мы хотим.

  • Вы можете увидеть символическую ссылку:
ls -la /usr/bin | grep gcc-4.4
ls -la /usr/bin | grep g++-4.4
  • Итак, нам нужно удалить символическую ссылку GCC и символическую ссылку G ++, а затем воссоздать их, связанные с GCC 4.3 и G ++ 4.3:
rm /usr/bin/gcc
rm /usr/bin/g++

ln -s /usr/bin/gcc-4.3 /usr/bin/gcc
ln -s /usr/bin/g++-4.3 /usr/bin/g++
  • Теперь, если мы снова проверим символические ссылки, мы увидим GCC & amp; G ++ теперь связаны с GCC 4.3 и G ++ 4.3:
ls -la /usr/bin/ | grep gcc
ls -la /usr/bin/ | grep g++
  • Наконец, мы можем снова проверить наш GCC -v и убедиться, что мы используем правильная версия:
gcc -v
g++ -v
31
ответ дан 31 July 2018 в 23:23

Это действительно желательно? Существуют изменения ABI между версиями gcc. Компиляция чего-либо с одной версией (например, всей операционной системы), а затем компиляция чего-то другого с другой версией может вызвать конфликт.

Например, модули ядра всегда должны быть скомпилированы с той же версией gcc, используемой для компиляции ядра. Имея это в виду, если вы вручную изменили символическую ссылку между /usr/bin/gcc и версией, используемой в вашей версии Ubuntu, будущие модули DKMS могут использовать неправильную версию gcc.

Если вы просто хотите для создания вещей с другой версией gcc, это достаточно просто, даже с помощью скриптов. Например, вы можете перейти в версию gcc в переменной среды CC:

CC="gcc-4.5" ./configure
CC="gcc-4.5" make

Вам может не понадобиться это в команде make (обычно скрипты configure вставляют), но это не больно.

19
ответ дан 31 July 2018 в 23:23

Рассмотрим одностороннее обновление:

  • sudo apt install gcc-7
  • sudo apt remove gcc-5

apt автоматически обрабатывает ссылки сотрудников в этом дело. Новая версия C / C ++ довольно совместима. Вам вряд ли когда-нибудь понадобится старый.

-1
ответ дан 31 July 2018 в 23:23

Изменить:

Предполагается, что вы установили версию сначала, например:

sudo apt install gcc-4.9 g++-4.9

Оригинал:

И вот одно- лайнер для тех, кто ленив, просто измените номер в конце на нужную вам версию. Это приведет к изменению для gcc и / или g ++

ls -la /usr/bin/ | grep -oP "[\S]*(gcc|g\+\+)(-[a-z]+)*[\s]" | xargs bash -c 'for link in ${@:1}; do sudo ln -s -f "/usr/bin/${link}-${0}" "/usr/bin/${link}"; done' 4.9

. В этом примере я переключился на 4.9

. Нет ошибок и что нет в этом примере, так что вы можете хотите проверить, что будет выполняться до запуска. Просто добавьте эхо до sudo. Для полноты я также предоставляю контрольную строку:

ls -la /usr/bin/ | grep -oP "[\S]*(gcc|g\+\+)(-[a-z]+)*[\s]" | xargs bash -c 'for link in ${@:1}; do echo sudo ln -s -f "/usr/bin/${link}-${0}" "/usr/bin/${link}"; done' 4.9

Результат проверки должен выглядеть примерно так:

sudo ln -s -f /usr/bin/g++-4.9 /usr/bin/g++
sudo ln -s -f /usr/bin/gcc-4.9 /usr/bin/gcc
sudo ln -s -f /usr/bin/gcc-ar-4.9 /usr/bin/gcc-ar
sudo ln -s -f /usr/bin/gcc-nm-4.9 /usr/bin/gcc-nm
sudo ln -s -f /usr/bin/gcc-ranlib-4.9 /usr/bin/gcc-ranlib
sudo ln -s -f /usr/bin/x86_64-linux-gnu-g++-4.9 /usr/bin/x86_64-linux-gnu-g++
sudo ln -s -f /usr/bin/x86_64-linux-gnu-gcc-4.9 /usr/bin/x86_64-linux-gnu-gcc
sudo ln -s -f /usr/bin/x86_64-linux-gnu-gcc-ar-4.9 /usr/bin/x86_64-linux-gnu-gcc-ar
sudo ln -s -f /usr/bin/x86_64-linux-gnu-gcc-nm-4.9 /usr/bin/x86_64-linux-gnu-gcc-nm
sudo ln -s -f /usr/bin/x86_64-linux-gnu-gcc-ranlib-4.9 /usr/bin/x86_64-linux-gnu-gcc-ranlib

Вы можете проверить версию после:

gcc --version

Полу-подробное объяснение:

  • ls -la / usr / bin / перечисляет все файлы в / usr / bin
  • | pipe (send) вывод к следующей команде
  • grep -oP соответствует регулярному выражению поиска в строке. o показывает только результат не всей согласованной строки. P сообщает grep использовать perl-regex. Я не буду вдаваться в regex здесь, прочитайте его, если хотите.
  • xargs просто помещается, он собирает результаты, которые отправляются на него и отправляют все из них до конца. т. е. команде, следующей за xargs
  • bash, это bash. Флаг c говорит ему использовать строку в качестве команды. В этом примере он перебирает аргументы, отправленные из xargs, пропуская первый (0-й) аргумент, в этом случае цикл пропускает 4.9. 0-й аргумент используется в цикле для изменения ссылки.
  • ln -s -f Флаг s создает символическую ссылку, f при необходимости отжимает сначала.
10
ответ дан 2 August 2018 в 18:20

выполнить в терминале:

gcc -v
g++ -v

Хорошо, так что часть довольно проста. Сложная часть заключается в том, что когда вы выдаете команду GCC, это на самом деле сиболическая ссылка, к которой вы когда-либо использовали GCC. Это означает, что мы можем создать символическую ссылку от GCC на любую версию GCC, которую мы хотим.

  • Вы можете увидеть символическую ссылку:
ls -la /usr/bin | grep gcc-4.4
ls -la /usr/bin | grep g++-4.4
  • Итак, нам нужно удалить символическую ссылку GCC и символическую ссылку G ++, а затем воссоздать их, связанные с GCC 4.3 и G ++ 4.3:
rm /usr/bin/gcc
rm /usr/bin/g++

ln -s /usr/bin/gcc-4.3 /usr/bin/gcc
ln -s /usr/bin/g++-4.3 /usr/bin/g++
  • Теперь, если мы снова проверим символические ссылки, мы увидим GCC & amp; G ++ теперь связаны с GCC 4.3 и G ++ 4.3:
ls -la /usr/bin/ | grep gcc
ls -la /usr/bin/ | grep g++
  • Наконец, мы можем снова проверить наш GCC -v и убедиться, что мы используем правильная версия:
gcc -v
g++ -v
31
ответ дан 2 August 2018 в 18:20

Это действительно желательно? Существуют изменения ABI между версиями gcc. Компиляция чего-либо с одной версией (например, всей операционной системы), а затем компиляция чего-то другого с другой версией может вызвать конфликт.

Например, модули ядра всегда должны быть скомпилированы с той же версией gcc, используемой для компиляции ядра. Имея это в виду, если вы вручную изменили символическую ссылку между /usr/bin/gcc и версией, используемой в вашей версии Ubuntu, будущие модули DKMS могут использовать неправильную версию gcc.

Если вы просто хотите для создания вещей с другой версией gcc, это достаточно просто, даже с помощью скриптов. Например, вы можете перейти в версию gcc в переменной среды CC:

CC="gcc-4.5" ./configure
CC="gcc-4.5" make

Вам может не понадобиться это в команде make (обычно скрипты configure вставляют), но это не больно.

19
ответ дан 2 August 2018 в 18:20

Рассмотрим одностороннее обновление:

  • sudo apt install gcc-7
  • sudo apt remove gcc-5

apt автоматически обрабатывает ссылки сотрудников в этом дело. Новая версия C / C ++ довольно совместима. Вам вряд ли когда-нибудь понадобится старый.

-1
ответ дан 2 August 2018 в 18:20

Изменить:

Предполагается, что вы установили версию сначала, например:

sudo apt install gcc-4.9 g++-4.9

Оригинал:

И вот одно- лайнер для тех, кто ленив, просто измените номер в конце на нужную вам версию. Это приведет к изменению для gcc и / или g ++

ls -la /usr/bin/ | grep -oP "[\S]*(gcc|g\+\+)(-[a-z]+)*[\s]" | xargs bash -c 'for link in ${@:1}; do sudo ln -s -f "/usr/bin/${link}-${0}" "/usr/bin/${link}"; done' 4.9

. В этом примере я переключился на 4.9

. Нет ошибок и что нет в этом примере, так что вы можете хотите проверить, что будет выполняться до запуска. Просто добавьте эхо до sudo. Для полноты я также предоставляю контрольную строку:

ls -la /usr/bin/ | grep -oP "[\S]*(gcc|g\+\+)(-[a-z]+)*[\s]" | xargs bash -c 'for link in ${@:1}; do echo sudo ln -s -f "/usr/bin/${link}-${0}" "/usr/bin/${link}"; done' 4.9

Результат проверки должен выглядеть примерно так:

sudo ln -s -f /usr/bin/g++-4.9 /usr/bin/g++
sudo ln -s -f /usr/bin/gcc-4.9 /usr/bin/gcc
sudo ln -s -f /usr/bin/gcc-ar-4.9 /usr/bin/gcc-ar
sudo ln -s -f /usr/bin/gcc-nm-4.9 /usr/bin/gcc-nm
sudo ln -s -f /usr/bin/gcc-ranlib-4.9 /usr/bin/gcc-ranlib
sudo ln -s -f /usr/bin/x86_64-linux-gnu-g++-4.9 /usr/bin/x86_64-linux-gnu-g++
sudo ln -s -f /usr/bin/x86_64-linux-gnu-gcc-4.9 /usr/bin/x86_64-linux-gnu-gcc
sudo ln -s -f /usr/bin/x86_64-linux-gnu-gcc-ar-4.9 /usr/bin/x86_64-linux-gnu-gcc-ar
sudo ln -s -f /usr/bin/x86_64-linux-gnu-gcc-nm-4.9 /usr/bin/x86_64-linux-gnu-gcc-nm
sudo ln -s -f /usr/bin/x86_64-linux-gnu-gcc-ranlib-4.9 /usr/bin/x86_64-linux-gnu-gcc-ranlib

Вы можете проверить версию после:

gcc --version

Полу-подробное объяснение:

  • ls -la / usr / bin / перечисляет все файлы в / usr / bin
  • | pipe (send) вывод к следующей команде
  • grep -oP соответствует регулярному выражению поиска в строке. o показывает только результат не всей согласованной строки. P сообщает grep использовать perl-regex. Я не буду вдаваться в regex здесь, прочитайте его, если хотите.
  • xargs просто помещается, он собирает результаты, которые отправляются на него и отправляют все из них до конца. т. е. команде, следующей за xargs
  • bash, это bash. Флаг c говорит ему использовать строку в качестве команды. В этом примере он перебирает аргументы, отправленные из xargs, пропуская первый (0-й) аргумент, в этом случае цикл пропускает 4.9. 0-й аргумент используется в цикле для изменения ссылки.
  • ln -s -f Флаг s создает символическую ссылку, f при необходимости отжимает сначала.
10
ответ дан 3 August 2018 в 20:39

выполнить в терминале:

gcc -v
g++ -v

Хорошо, так что часть довольно проста. Сложная часть заключается в том, что когда вы выдаете команду GCC, это на самом деле сиболическая ссылка, к которой вы когда-либо использовали GCC. Это означает, что мы можем создать символическую ссылку от GCC на любую версию GCC, которую мы хотим.

  • Вы можете увидеть символическую ссылку:
ls -la /usr/bin | grep gcc-4.4
ls -la /usr/bin | grep g++-4.4
  • Итак, нам нужно удалить символическую ссылку GCC и символическую ссылку G ++, а затем воссоздать их, связанные с GCC 4.3 и G ++ 4.3:
rm /usr/bin/gcc
rm /usr/bin/g++

ln -s /usr/bin/gcc-4.3 /usr/bin/gcc
ln -s /usr/bin/g++-4.3 /usr/bin/g++
  • Теперь, если мы снова проверим символические ссылки, мы увидим GCC & amp; G ++ теперь связаны с GCC 4.3 и G ++ 4.3:
ls -la /usr/bin/ | grep gcc
ls -la /usr/bin/ | grep g++
  • Наконец, мы можем снова проверить наш GCC -v и убедиться, что мы используем правильная версия:
gcc -v
g++ -v
31
ответ дан 3 August 2018 в 20:39

Это действительно желательно? Существуют изменения ABI между версиями gcc. Компиляция чего-либо с одной версией (например, всей операционной системы), а затем компиляция чего-то другого с другой версией может вызвать конфликт.

Например, модули ядра всегда должны быть скомпилированы с той же версией gcc, используемой для компиляции ядра. Имея это в виду, если вы вручную изменили символическую ссылку между /usr/bin/gcc и версией, используемой в вашей версии Ubuntu, будущие модули DKMS могут использовать неправильную версию gcc.

Если вы просто хотите для создания вещей с другой версией gcc, это достаточно просто, даже с помощью скриптов. Например, вы можете перейти в версию gcc в переменной среды CC:

CC="gcc-4.5" ./configure
CC="gcc-4.5" make

Вам может не понадобиться это в команде make (обычно скрипты configure вставляют), но это не больно.

19
ответ дан 3 August 2018 в 20:39

Рассмотрим одностороннее обновление:

  • sudo apt install gcc-7
  • sudo apt remove gcc-5

apt автоматически обрабатывает ссылки сотрудников в этом дело. Новая версия C / C ++ довольно совместима. Вам вряд ли когда-нибудь понадобится старый.

-1
ответ дан 3 August 2018 в 20:39

Изменить:

Предполагается, что вы установили версию сначала, например:

sudo apt install gcc-4.9 g++-4.9

Оригинал:

И вот одно- лайнер для тех, кто ленив, просто измените номер в конце на нужную вам версию. Это приведет к изменению для gcc и / или g ++

ls -la /usr/bin/ | grep -oP "[\S]*(gcc|g\+\+)(-[a-z]+)*[\s]" | xargs bash -c 'for link in ${@:1}; do sudo ln -s -f "/usr/bin/${link}-${0}" "/usr/bin/${link}"; done' 4.9

. В этом примере я переключился на 4.9

. Нет ошибок и что нет в этом примере, так что вы можете хотите проверить, что будет выполняться до запуска. Просто добавьте эхо до sudo. Для полноты я также предоставляю контрольную строку:

ls -la /usr/bin/ | grep -oP "[\S]*(gcc|g\+\+)(-[a-z]+)*[\s]" | xargs bash -c 'for link in ${@:1}; do echo sudo ln -s -f "/usr/bin/${link}-${0}" "/usr/bin/${link}"; done' 4.9

Результат проверки должен выглядеть примерно так:

sudo ln -s -f /usr/bin/g++-4.9 /usr/bin/g++
sudo ln -s -f /usr/bin/gcc-4.9 /usr/bin/gcc
sudo ln -s -f /usr/bin/gcc-ar-4.9 /usr/bin/gcc-ar
sudo ln -s -f /usr/bin/gcc-nm-4.9 /usr/bin/gcc-nm
sudo ln -s -f /usr/bin/gcc-ranlib-4.9 /usr/bin/gcc-ranlib
sudo ln -s -f /usr/bin/x86_64-linux-gnu-g++-4.9 /usr/bin/x86_64-linux-gnu-g++
sudo ln -s -f /usr/bin/x86_64-linux-gnu-gcc-4.9 /usr/bin/x86_64-linux-gnu-gcc
sudo ln -s -f /usr/bin/x86_64-linux-gnu-gcc-ar-4.9 /usr/bin/x86_64-linux-gnu-gcc-ar
sudo ln -s -f /usr/bin/x86_64-linux-gnu-gcc-nm-4.9 /usr/bin/x86_64-linux-gnu-gcc-nm
sudo ln -s -f /usr/bin/x86_64-linux-gnu-gcc-ranlib-4.9 /usr/bin/x86_64-linux-gnu-gcc-ranlib

Вы можете проверить версию после:

gcc --version

Полу-подробное объяснение:

  • ls -la / usr / bin / перечисляет все файлы в / usr / bin
  • | pipe (send) вывод к следующей команде
  • grep -oP соответствует регулярному выражению поиска в строке. o показывает только результат не всей согласованной строки. P сообщает grep использовать perl-regex. Я не буду вдаваться в regex здесь, прочитайте его, если хотите.
  • xargs просто помещается, он собирает результаты, которые отправляются на него и отправляют все из них до конца. т. е. команде, следующей за xargs
  • bash, это bash. Флаг c говорит ему использовать строку в качестве команды. В этом примере он перебирает аргументы, отправленные из xargs, пропуская первый (0-й) аргумент, в этом случае цикл пропускает 4.9. 0-й аргумент используется в цикле для изменения ссылки.
  • ln -s -f Флаг s создает символическую ссылку, f при необходимости отжимает сначала.
10
ответ дан 5 August 2018 в 05:21

Другие вопросы по тегам:

Похожие вопросы: