Итак, я установил 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 -v
g++ -v
Хорошо, так что часть довольно проста. Сложная часть заключается в том, что когда вы выдаете команду GCC, это на самом деле сиболическая ссылка, к которой вы когда-либо использовали GCC. Это означает, что мы можем создать символическую ссылку от GCC на любую версию GCC, которую мы хотим.
blockquote>ls -la /usr/bin | grep gcc-4.4 ls -la /usr/bin | grep g++-4.4
- Итак, нам нужно удалить символическую ссылку GCC и символическую ссылку G ++, а затем воссоздать их, связанные с GCC 4.3 и G ++ 4.3:
blockquote>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:
blockquote>ls -la /usr/bin/ | grep gcc ls -la /usr/bin/ | grep g++
- Наконец, мы можем снова проверить наш GCC -v и убедиться, что мы используем правильная версия:
blockquote>gcc -v g++ -v
Это действительно желательно? Существуют изменения ABI между версиями gcc
. Компиляция чего-либо с одной версией (например, всей операционной системы), а затем компиляция чего-то другого с другой версией может вызвать конфликт.
Например, модули ядра всегда должны быть скомпилированы с той же версией gcc
, используемой для компиляции ядра. Имея это в виду, если вы вручную изменили символическую ссылку между /usr/bin/gcc
и версией, используемой в вашей версии Ubuntu, будущие модули DKMS могут использовать неправильную версию gcc
.
Если вы просто хотите для создания вещей с другой версией gcc
, это достаточно просто, даже с помощью скриптов. Например, вы можете перейти в версию gcc
в переменной среды CC
:
CC="gcc-4.5" ./configure
CC="gcc-4.5" make
Вам может не понадобиться это в команде make (обычно скрипты configure вставляют), но это не больно.
Рассмотрим одностороннее обновление:
sudo apt install gcc-7
sudo apt remove gcc-5
apt автоматически обрабатывает ссылки сотрудников в этом дело. Новая версия C / C ++ довольно совместима. Вам вряд ли когда-нибудь понадобится старый.
Изменить:
Предполагается, что вы установили версию сначала, например:
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
Полу-подробное объяснение:
выполнить в терминале:
gcc -v
g++ -v
Хорошо, так что часть довольно проста. Сложная часть заключается в том, что когда вы выдаете команду GCC, это на самом деле сиболическая ссылка, к которой вы когда-либо использовали GCC. Это означает, что мы можем создать символическую ссылку от GCC на любую версию GCC, которую мы хотим.
blockquote>ls -la /usr/bin | grep gcc-4.4 ls -la /usr/bin | grep g++-4.4
- Итак, нам нужно удалить символическую ссылку GCC и символическую ссылку G ++, а затем воссоздать их, связанные с GCC 4.3 и G ++ 4.3:
blockquote>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:
blockquote>ls -la /usr/bin/ | grep gcc ls -la /usr/bin/ | grep g++
- Наконец, мы можем снова проверить наш GCC -v и убедиться, что мы используем правильная версия:
blockquote>gcc -v g++ -v
Это действительно желательно? Существуют изменения ABI между версиями gcc
. Компиляция чего-либо с одной версией (например, всей операционной системы), а затем компиляция чего-то другого с другой версией может вызвать конфликт.
Например, модули ядра всегда должны быть скомпилированы с той же версией gcc
, используемой для компиляции ядра. Имея это в виду, если вы вручную изменили символическую ссылку между /usr/bin/gcc
и версией, используемой в вашей версии Ubuntu, будущие модули DKMS могут использовать неправильную версию gcc
.
Если вы просто хотите для создания вещей с другой версией gcc
, это достаточно просто, даже с помощью скриптов. Например, вы можете перейти в версию gcc
в переменной среды CC
:
CC="gcc-4.5" ./configure
CC="gcc-4.5" make
Вам может не понадобиться это в команде make (обычно скрипты configure вставляют), но это не больно.
Рассмотрим одностороннее обновление:
sudo apt install gcc-7
sudo apt remove gcc-5
apt автоматически обрабатывает ссылки сотрудников в этом дело. Новая версия C / C ++ довольно совместима. Вам вряд ли когда-нибудь понадобится старый.
Изменить:
Предполагается, что вы установили версию сначала, например:
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
Полу-подробное объяснение:
выполнить в терминале:
gcc -v
g++ -v
Хорошо, так что часть довольно проста. Сложная часть заключается в том, что когда вы выдаете команду GCC, это на самом деле сиболическая ссылка, к которой вы когда-либо использовали GCC. Это означает, что мы можем создать символическую ссылку от GCC на любую версию GCC, которую мы хотим.
blockquote>ls -la /usr/bin | grep gcc-4.4 ls -la /usr/bin | grep g++-4.4
- Итак, нам нужно удалить символическую ссылку GCC и символическую ссылку G ++, а затем воссоздать их, связанные с GCC 4.3 и G ++ 4.3:
blockquote>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:
blockquote>ls -la /usr/bin/ | grep gcc ls -la /usr/bin/ | grep g++
- Наконец, мы можем снова проверить наш GCC -v и убедиться, что мы используем правильная версия:
blockquote>gcc -v g++ -v
Это действительно желательно? Существуют изменения ABI между версиями gcc
. Компиляция чего-либо с одной версией (например, всей операционной системы), а затем компиляция чего-то другого с другой версией может вызвать конфликт.
Например, модули ядра всегда должны быть скомпилированы с той же версией gcc
, используемой для компиляции ядра. Имея это в виду, если вы вручную изменили символическую ссылку между /usr/bin/gcc
и версией, используемой в вашей версии Ubuntu, будущие модули DKMS могут использовать неправильную версию gcc
.
Если вы просто хотите для создания вещей с другой версией gcc
, это достаточно просто, даже с помощью скриптов. Например, вы можете перейти в версию gcc
в переменной среды CC
:
CC="gcc-4.5" ./configure
CC="gcc-4.5" make
Вам может не понадобиться это в команде make (обычно скрипты configure вставляют), но это не больно.
Рассмотрим одностороннее обновление:
sudo apt install gcc-7
sudo apt remove gcc-5
apt автоматически обрабатывает ссылки сотрудников в этом дело. Новая версия C / C ++ довольно совместима. Вам вряд ли когда-нибудь понадобится старый.
Изменить:
Предполагается, что вы установили версию сначала, например:
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
Полу-подробное объяснение:
выполнить в терминале:
gcc -v
g++ -v
Хорошо, так что часть довольно проста. Сложная часть заключается в том, что когда вы выдаете команду GCC, это на самом деле сиболическая ссылка, к которой вы когда-либо использовали GCC. Это означает, что мы можем создать символическую ссылку от GCC на любую версию GCC, которую мы хотим.
blockquote>ls -la /usr/bin | grep gcc-4.4 ls -la /usr/bin | grep g++-4.4
- Итак, нам нужно удалить символическую ссылку GCC и символическую ссылку G ++, а затем воссоздать их, связанные с GCC 4.3 и G ++ 4.3:
blockquote>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:
blockquote>ls -la /usr/bin/ | grep gcc ls -la /usr/bin/ | grep g++
- Наконец, мы можем снова проверить наш GCC -v и убедиться, что мы используем правильная версия:
blockquote>gcc -v g++ -v
Это действительно желательно? Существуют изменения ABI между версиями gcc
. Компиляция чего-либо с одной версией (например, всей операционной системы), а затем компиляция чего-то другого с другой версией может вызвать конфликт.
Например, модули ядра всегда должны быть скомпилированы с той же версией gcc
, используемой для компиляции ядра. Имея это в виду, если вы вручную изменили символическую ссылку между /usr/bin/gcc
и версией, используемой в вашей версии Ubuntu, будущие модули DKMS могут использовать неправильную версию gcc
.
Если вы просто хотите для создания вещей с другой версией gcc
, это достаточно просто, даже с помощью скриптов. Например, вы можете перейти в версию gcc
в переменной среды CC
:
CC="gcc-4.5" ./configure
CC="gcc-4.5" make
Вам может не понадобиться это в команде make (обычно скрипты configure вставляют), но это не больно.
gcc
не является частью системы alternatives
и почему это не особенно желательно. Если ни один из них не передумает, просто сделайте это вручную.
– Oli♦
15 February 2011 в 20:43
$ 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 ++ довольно совместима. Вам вряд ли когда-нибудь понадобится старый.