- Программирование, настройка и администрирование CAD систем
- воскресенье, 29 сентября 2013 г.
- Установка более новых версий компиляторов gcc и g++
- 1. Установка gcc 4.8.1 (компилятор C)
- 2. Установка g++ 4.8.1 (компилятор C++)
- Установка GCC в Ubuntu
- Набор компиляторов GCC
- Установка GCC в Ubuntu
- Использование GCC в Ubuntu
- Выводы
- How can I update gcc 5.3 to 6.1? [duplicate]
- 2 Answers 2
- Обновление GCC
- Contents
- Вкратце
- Объяснение обновления GCC
- libtool
- Изменения ABI
- Особый случай C++11 (и C++14)
- Какие пакеты определенно нужно пересобрать?
- Пересборка всего
- Устранение проблем
- пересборка boost
- libstdc++.so.6: version `GLIBCXX_3.4.15′ not found
Программирование, настройка и администрирование 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, а также рассмотрим базовые приемы работы с этим набором программ в терминале.
Набор компиляторов 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:
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 кода.
Более подробную информацию и некоторые примеры можно найти здесь:
Какие пакеты определенно нужно пересобрать?
В следующей таблице приведены пакеты, которые нужно пересобрать, если они установлены, и причины этой необходимости.
Пакет | Нужно пересобрать, потому что . |
---|---|
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 в предыдущем разделе.
Источник