Как обновить gcc windows

Обновлено: 07.07.2024

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

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

Contents

Вкратце

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

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

Заметка
Если вы обновляетесь с GCC 4.x на GCC 5.x или позднее, есть дополнительные инструкции; смотрите отдельную страницу Обновление с gcc-4.x на gcc-5.x.

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

После этого, убедитесь в целостности системы, запустив 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

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

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

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

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

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

Я привык вручную устанавливать GCC из источника раньше на Ubuntu, и это был болезненный процесс. Поэтому я действительно не хочу повторять этот процесс. В настоящее время на моей машине установлены MinGW и GCC (4.6.2). Итак, есть ли простой способ обновить GCC, не создавая его полностью из источника? Кто-нибудь делал это раньше, может поделиться со мной некоторыми советами?

обновить список пакетов (требуется подключение к интернету):

после этого запустите обновление

после этого ваши пакеты mingw должны быть обновлены до последних версий.

существует также версия GUI под названием MinGW Installation Manager и расположен обычно в

обновление: по состоянию на ноябрь-5-2012, MinGW включает 4.7.2 компилятора GCC, который является самой последней версией. Я лично буду использовать пакет MinGW, так как он включает префикса msys и другие инструменты, и поскольку это стандарт defacto, я надеюсь, что он лучше поддерживается. Единственным недостатком является то, что включенный GDB не включает скрипты Python, но я думаю, что его можно обновить отдельно.

Я не знаю, можете ли вы обновить GCC в MinGW, но существуют альтернативные проекты для MinGW с более новыми версиями GCC.

на компилятор MinGW-сборки project предоставляет пакет, аналогичный MinGW, но с обновленным GCC (4.7.2). Я извлек файлы в c:\MinGW (чтобы я мог использовать тот же путь) после перемещения существующего MinGW в другую папку. Только по MinGW имеет префикса msys, поэтому, если вам это нужно (я сделал), скопируйте папку msys из исходного MinGW.

после установки MinGW-сборки результат g++ --версия:

последний GCC, который поставляется со стандартным MinGW, в настоящее время 4.7.0. Я скомпилировал несколько простых проектов в Code:: Blocks и последнем источнике wxWidgets, и все, кажется, работает.

стоит отметить, что MinGW-builds включает версию GDB с поддержкой скрипта Python, если вы хотите поддержку STL pretty printer или другую GDB Python функции.

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

наконец, есть MinGW-w64 проект, который является вилкой MinGW. Rubenvb, который опубликовал ответ на этот вопрос, имеет хорошие автономные пакеты (в папке личных сборок) на основе этого проекта, которые включают обновленный GCC (4.7.2). Этот включенный GDB, похоже, включен скрипт Python.

Я построил более современный GCC 4.7 (он построен в рамках замораживания кода, поэтому он должен быть эквивалентен выпуску). Кроме того, эта сборка содержит <thread> поддержка.

на - gccпакета _linux то, что вы хотите, если вы хотите использовать его на Linux. Просто извлеките где-нибудь и добавьте mingw??/bin каталог к пути.

PS: есть собственный компилятор Windows и сборка Windows Clang. Я предлагаю использовать Clang только с одной из моих сборок GCC 4.6, так как у него есть проблемы с libstd++GCC 4.7. Извлеките пакет Clang в том же каталоге, что и пакет GCC, и он будет работать из коробки.

Я привык вручную устанавливать GCC из исходного кода на Ubuntu, и это был болезненный процесс. Поэтому я действительно не хочу повторять этот процесс. В настоящее время у меня есть MinGW и GCC (4.6.2), установленные на моей машине. Итак, есть ли простой способ обновить GCC, не создавая его полностью из исходного кода? Кто-нибудь сделал это, прежде чем поделиться своими советами?

4 ответа

Можно ли просто распаковать x86_64-mingw32-gcc-4.7.0-release-c, c ++, fortran-sjlj.zip и вставить в текущую установку MinGW? Это что-то сломает из-за несовместимости библиотек? Он в основном отключает mingw-get, чтобы он больше не отслеживал обновления для gcc?

Обновить список пакетов (необходимо подключение к Интернету):

После этого обновления

После этого ваши пакеты mingw должны быть обновлены до последних версий.

Существует также версия GUI под названием MinGW Installation Manager и расположена типично в

Происходит сбой «mmingw-get upgrade» («[. ] перестал работать».). Есть идеи почему? Для справки: Вы также можете запустить версию GUI, просто набрав mingw-get без аргументов

ОБНОВЛЕНИЕ: по состоянию на 5 ноября 2012 года MinGW включает 4.7.2 компилятора GCC, который является самой последней версией. Я лично буду использовать пакет MinGW, так как он включает MSYS и другие инструменты, и поскольку это стандарт defacto, я надеюсь, что он лучше поддерживается. Единственным недостатком является включенная GDB не включает в себя скрипты Python, но я думаю, что их можно обновлять отдельно.

Я не знаю, можете ли вы обновить GCC в MinGW, но есть альтернативные проекты MinGW с более новыми версиями GCC.

Проект MinGW-builds предоставляет пакет, похожий на MinGW, но с обновленным GCC (4.7.2). Я извлек файлы в c:\MinGW (чтобы я мог использовать один и тот же путь) после перемещения моего существующего MinGW в другую папку. Только MinGW имеет MSYS, поэтому, если вам понадобится (я), скопируйте папку msys из исходного MinGW.

После установки MinGW-builds результат g++ -version:

Последний GCC, который поставляется со стандартным MinGW, в настоящее время составляет 4.7.0. Я собрал несколько простых проектов в Code:: Blocks и последний источник wxWidgets, и все, кажется, работает.

Стоит отметить, что MinGW-builds включает в себя версию GDB с поддержкой Python script, если вам нужна поддержка принтера с поддержкой STL или другие функции GDB Python.

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

Наконец, существует проект MinGW-w64, который является вилкой MinGW. Rubenvb, который отправил ответ на этот вопрос, имеет хорошие автономные пакеты (в папке личных сборок) на основе этого проекта, который включает обновленный GCC (4.7.2). Включенный GDB, по-видимому, включен Python script.

Маленькая шпаргалка на тему того, как в 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 (читаю это), то захотелось поставить наиболее свежую версию компилятора.

  • 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

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++ результат был бы иным:

Читайте также: