Gcc linux как обновить

Программирование, настройка и администрирование CAD систем

Программирование, настройка и администрирование CAD систем

воскресенье, 29 сентября 2013 г.

Установка более новых версий компиляторов gcc и g++

Маленькая шпаргалка на тему того, как в Linux установить наиболее «свежие» на сегодняшний день release-версии компиляторов gcc и g++. В моём случае — установить версии 4.8.1, взамен предустановленных по умолчанию версий 4.6.3 в операционной системе Ubuntu 12.04 LTS.

GCC now uses C++ as its implementation language. This means that to build GCC from sources, you will need a C++ compiler that understands C++ 2003.

реализация GCC теперь полностью переписана на C++. Причины принятия такого решения перечислены здесь в разделах Background и Rationale. Состояние поддержки стандарта C++11 в GCC 4.8 обозначено здесь. О поддержке стандарта C11 можно почитать тут. Поскольку меня весьма интересует C++11 (читаю это), то захотелось поставить наиболее свежую версию компилятора.

Обозначенный далее перечень действий подходит для использования в следующих операционных системах Linux:

  • Ubuntu 13.10 Saucy Salamander
  • Ubuntu 13.04 Raring Ringtail
  • Ubuntu 12.10 Quantal Quetzal
  • Ubuntu 12.04 Precise Pangolin
  • Ubuntu 10.04 Lucid Lynx
  • Linux Mint 16 Petra
  • Linux Mint 15 Olivia
  • Linux Mint 14 Nadia
  • Linux Mint 13 Maya
  • Elementary OS 0.2 Luna

Поскольку версии 4.8.1 имеются в PPA, то их установка происходит достаточно просто.

1. Установка gcc 4.8.1 (компилятор C)

$ sudo add-apt-repository ppa:ubuntu-toolchain-r/test
$ sudo apt-get update
$ sudo apt-get install gcc-4.8

После успешной установки gcc 4.8.1, необходимо удалить gcc и g++ из списка приложений, используемых по умолчанию:

$ sudo update-alternatives —remove-all gcc

Назначаем gcc 4.8.1 компилятором, используемым по умолчанию:

$ sudo update-alternatives —install /usr/bin/gcc gcc /usr/bin/gcc-4.8 20
$ sudo update-alternatives —config gcc

Источник обозначенной выше информации здесь. Теперь нужно обновить и компилятор g++ (см. след. раздел).

2. Установка g++ 4.8.1 (компилятор C++)

После обновления gcc приступаем к обновлению g++:

sudo update-alternatives —remove-all g++
sudo apt-get install g++-4.8

sudo update-alternatives —install /usr/bin/g++ g++ /usr/bin/g++-4.8 20
sudo update-alternatives —config g++

sudo apt-get update
sudo apt-get upgrade -y
sudo apt-get dist-upgrade

Всё. После обновления системы проверяем версии компиляторов:

$ gcc -v
.
gcc version 4.8.1

$ g++ -v
gcc version 4.8.1

Т. о. всё прошло успешно.

Примечание: если не выполнять действий, описанных в разделе 2, то для g++ результат был бы иным:

gcc version 4.6.3

т. е. обновился бы только компилятор gcc, а g++ остался бы старым.

Источник

Установка GCC в Ubuntu

Большинство программ в Linux написаны на C или С++, и если вы хотите собирать их из исходников, то вам обязательно понадобиться компилятор, также он понадобиться, если захотите начать писать свои программы на одном из этих языков.

Существует два основных компилятора в Linux — это GCC и Clang, они похожи по своим возможностям, но так сложилось, что первый считается стандартом для Ubuntu. GCC расшифровывается как GNU Compiler Collection. В этой статье мы рассмотрим, как выполняется установка GCC в Ubuntu, а также рассмотрим базовые приемы работы с этим набором программ в терминале.

Читайте также:  Как записывать iso образ windows nero

Набор компиляторов GCC

Все программы представляют собой набор машинных команд, которые выполняются процессором. Эти команды — последовательность бит. Но писать программы наборами бит очень неудобно, поэтому были придуманы языки программирования высокого уровня. Код на языке программирования хорошо читаем и понятен для человека, а когда из него нужно сделать программу, компилятор ubuntu преобразует все в машинные команды.

В базовую поставку компилятора входят такие программы:

  • libc6-dev — заголовочные файлы стандартной библиотеки Си;
  • libstdc++6-dev — заголовочные файлы стандартной библиотеки С++;
  • gcc — компилятор языка программирования Си;
  • g++ — компилятор языка программирования C++;
  • make — утилита для организации сборки нескольких файлов;
  • dpkg-dev — инструменты сборки пакетов deb.

Все эти пакеты являются зависимостями пакета build-essential, поэтому для установки всего необходимого достаточно установить этот пакет.

Установка GCC в Ubuntu

Если вас устраивает текущая версия GCC, которая есть в официальных репозиториях дистрибутива, то вам достаточно установить пакет build-essential. Для этого выполните команду:

sudo apt -y install build-essential

После завершения установки все необходимое для компиляции программ будет установлено. И вы сможете использовать компилятор. Рассмотрим версии и расположение файлов компилятора:

whereis gcc make

Если необходима более новая версия компилятора, например, на данный момент последняя версия — 11, то можно использовать PPA разработчиков с тестовыми сборками. Для добавления PPA в систему выполните команды:

sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test && sudo apt update

Далее установите сам компилятор:

sudo apt -y install gcc-snapshot && sudo apt -y install gcc-11g++-11

Это не заменит ваш текущий компилятор на новый. В системе просто появятся 2 версии компиляторов gcc-11 и g++11, которые вы можете использовать для своих программ. Это лучший вариант на данный момент, но если вы хотите все же сделать gcc-9 компилятором по умолчанию, выполните:

sudo update-alternatives —install /usr/bin/gcc gcc /usr/bin/gcc-9 60 —slave /usr/bin/g++ g++ /usr/bin/g++-9

Готово, теперь вы можете проверить версию gcc-6:

Установка GCC в Ubuntu завершена, и можно переходить к сборке программ. Для удаления компилятора достаточно удалить пакет build-essential при помощи команды:

sudo apt purge -y build-essential && sudo apt-y autoremove

Использование GCC в Ubuntu

Рассмотрим пример компиляции минимальной программы hello.c для освоения работы с gcc. Вот код программы, откройте любой текстовый редактор и сохраните его в файле с названием hello.c:

#include
int main(void) <
printf(«Hello, world!\n»);
return 0;
>

Теперь запустим сборку программы:

Когда сборка программы будет завершена, на выходе появится файл с названием a.out. a.out –это имя исполняемого файла, которое по умолчанию, сгенерировано при помощи gcc. Далее можно запустить данный файл:

Готово, компилятор прекрасно работает в системе, и теперь можно писать свои программы или собирать чужие.

Выводы

В этой статье мы рассмотрели, как установить gcc в Ubuntu 20.04, это один из самых популярных компиляторов для этой операционной системы. И устанавливается он очень просто, если у вас остались вопросы, спрашивайте в комментариях!

На завершение видео с демонстрацией самого процесса:

Источник

How can I update gcc 5.3 to 6.1? [duplicate]

After installing Ubuntu 16.04 LTS, I found that gcc 5.3 installed by default but I don’t receive any updates to gcc . I opened up GCC website and I found the new release 6.1. How do I update?

Output of gcc —version :

2 Answers 2

You can install GCC 6 by adding the ubuntu-toolchain-r/test PPA. To do so, run the following commands:

Читайте также:  Get genuine windows agreements

You can verify that gcc-6 is installed by running gcc-6 —version and the output should say gcc-6 (Ubuntu 6.1.1-2ubuntu12

16.04) 6.1.1 20160510 .

As suggested by Mohamed Slama, if you want to further change the default GCC and G++ to the latest versions, install g++-6 with

If you want to build it from source (which I recommend as you can for example make a cross-compiler, etc.) download the source from a mirror.

Then extract it with:

After that change directory to there:

Then create build directory and cd to it:

Then configure the makefile ( —disable-multilib means to not build libraries for cross-compilation):

If you ran into errors due to missing required libraries or other prerequisites: (Credits to this)

And then build it:

This process may take some time and after done invoke this:

Источник

Обновление GCC

Данный документ показывает пользователям процесс обновления GCC.

Обратите внимание, что понижение версии GCC может иметь нежелаемые побочные эффекты. Обратитесь к секции решения проблем для информации по часто встречаемым проблемам.

Contents

Вкратце

Следующий раздел быстро введет вас в процесс обновления GCC (и того, как просто его сделать). Больше деталей предоставлено в следующем разделе Объяснение обновления GCC.

Большинство обновлений GCC так же просты, как смена версии компилятора (тут с 5.4.0 на 6.4.0) и пересборка libtool :

Проверьте текущую версию и удалите старую версию:

После этого, убедитесь в целостности системы, запустив revdep-rebuild:

Наслаждайтесь новым компилятором!

Объяснение обновления GCC

Обновление GCC всегда считалось какой-то мистикой, с предположениями от «пользователям ничего не нужно делать» до «пользователям нужно дважды пересобрать всю свою систему». Большинство страха, неуверенности и сомнений проистекает из проблем, связанных с несовместимостью ABI. Такое редко происходит в наши дни (и когда происходит, это анонсируется). Но, сначала кратко о libtool .

libtool

Причина, по которой нужно пересобирать libtool после обновления версий gcc это потому, что главной функцией libtool является объединение кода, зависящего от платформы в общем интерфейсе, что позволяет приложениям использовать разделяемые библиотеки без нужды иметь дело с вещами, зависящими от платформы для разделяемых библиотек. Чтобы реализовать эту функцию, скрипт libtool использует различные пути до библиотек, в которых есть жестко заданная информация о версии gcc .

Изменения ABI

ABI, или Двоичный интерфейс приложений, это набор соглашений, используемых всеми инструментами, работающими с бинарным видом программ, например, компиляторы, ассемблеры, линкеры и поддержка рантайма для языков (источник: Бинарная совместимость GCC). Когда ABI, используемый для бинарных приложений и библиотек меняется, появляется риск получить ошибку компоновщика, либо неработающие программы, если только вы не пересоберёте все программы, использующие код C++.

Да, C++, поскольку в большинстве случаев несоответствия обнаруживаются на уровне двоичного интерфейса приложений C++. Если вы обновляетесь до GCC 4.1, или GCC 5.1, вы, вероятно, столкнетесь с проблемами в двоичном интерфейсе. Чтобы избежать этого должна быть запущена команда revdep-rebuild для libstdc++.so.5 (от GCC 3 до GCC 4.1), или libstdc++.so.6 (от GCC 4 до GCC 5.1).

Так почему же это нужно только до GCC 3.4.0/4.1/5? Это потому что с этой версии GCC использует обратно-совместимое ABI, и пересборка приложений и библиотек больше не требуется. Конечно, мы не можем дать вам гарантию, что так будет вечно, но если снова возникнет несоответствие, мы явно опишем этот случай здесь. В этом случае, скорее всего, будет увеличена версия библиотеки libstdc++.so .

Особый случай C++11 (и C++14)

В то время как GCC (или точнее libstdc++) идет большими шагами вперед, гарантируя стабильность ABI, эта гарантия не распространяется на все части C++ в libstdc++. Формально, начиная с версии 3.4, GCC/libstdc++ только гарантируется стабильность C++98/C++03 ABI и не более. Это очень важно для пакетов, которые зависят от C++11. GCC даёт гарантию на стабильность C++11 ABI, начиная только с версии 5.1. Это означает, что переключение (даже незначительные) версии GCC (скажем, от 4.7.3 -> 4.7.4) может привести к поломке ABI для бинарных файлов, собранных из C++11 кода.

Читайте также:  Astra linux отключить экран блокировки

Более подробную информацию и некоторые примеры можно найти здесь:

Какие пакеты определенно нужно пересобрать?

В следующей таблице приведены пакеты, которые нужно пересобрать, если они установлены, и причины этой необходимости.

Пакет Нужно пересобрать, потому что .
sys-devel/libtool приложение libtool имеет внутри себя вшитые пути к встроенным библиотекам GCC
sys-devel/llvm зависит от конкретной версии GCC, могут возникнуть ошибки линкования с другими ебилдами, использующими LLVM (к примеру, media-libs/mesa), если их не пересобрать.
sys-devel/clang зависит от конкретной версии GCC, может зависеть от sys-devel/llvm.

Также известны случаи, когда пакеты должны быть собраны одним и тем же компилятором (к примеру, различные qt-* пакеты). Эти пакеты чаще всего обновляются сопровождающими пакета одновременно (поэтому они всегда будут собираться одной и той же версией GCC). Выборочная переустановка таких пакетов часто сопровождается проблемами.

Пересборка всего

Некоторые люди клянутся, что нужно пересобрать все пакеты на их системе при выходе новой версии GCC. Конечно, в этом нет смысла, так как многие приложения не используют GCC для процесса сборки и установки, и на них вообще не распространяется это изменение.

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

Кроме таких «небольших» плюсов, пересборка всего с нуля может быть обязательна в некоторых случаях, чтобы исправить проблемы без очевидных причин.

Некоторые проблемы с программами исконно трудны в диагностике, но их можно решить простой пересборкой одного или больше соответствующих пакетов. Если подобная проблема возникла после обновления GCC и сохранилась после применения revdep-rebuild как показано выше (и после пересборки прочих очевидно связанных пакетов), полная пересборка системы может решить этот вопрос.

Самый «безопасный» (но также затратный по времени) способ этого достичь — использование опции —emptytree ( -e ) для emerge, чтобы пересобрать системные пакеты и мир:

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

(Заметьте, что команды выше пересоберут пакеты в системном наборе дважды, что необходимо, дабы быть «абсолютно уверенными», что каждый пакет был собран в одинаковой [предположительно] «безпроблемной» среде. Любые проблемы, что сохраняются после этого — действительно баги, о которых нужно сообщить, или серьёзные проблемы с конфигурацией системы.)

Устранение проблем

пересборка boost

Если dev-libs/boost нужно пересобрать, вы получите следующее сообщение об ошибке:

Пересобрать можно с помощью:

libstdc++.so.6: version `GLIBCXX_3.4.15′ not found

В процессе обновлений вы можете встретить ошибку, похожую на следующую:

Это означает, что вы пытаетесь собрать пакет более старой версией GCC, чем собирались библиотеки, от которых зависит пакет. Помните, мы говорили, что C++ ABI обратно совместим? Это так, но означает только, что для сборки приложений и линковки библиотек могут использоваться более новые (или те же самые) версии GCC (по сравнению с версией GCC, использованной для сборки этих библиотек).

Для пересоборки всех зависящих от libstdc++ смотрите пример команды revdep-rebuild в предыдущем разделе.

Источник

Оцените статью