GNU Compiler Collection

Поделись знанием:
(перенаправлено с «Gcc»)
Перейти к: навигация, поиск
GNU Compiler Collection

управление GCC в командной строке
Тип

компилятор

Разработчик

проект GNU

Написана на

C/C++

Интерфейс

командная строка

Операционная система

кроссплатформенное программное обеспечение

Языки интерфейса

русский и ещё 16 языков

Последняя версия

6.2 (22 августа 2016[1])

Состояние

активное

Лицензия

GNU GPL

Сайт

[gcc.gnu.org/ .org]

GNU Compiler CollectionGNU Compiler Collection

GNU Compiler Collection (обычно используется сокращение GCC) — набор компиляторов для различных языков программирования, разработанный в рамках проекта GNU. GCC является свободным программным обеспечением, распространяется фондом свободного программного обеспечения (FSF) на условиях GNU GPL и GNU LGPL и является ключевым компонентом GNU toolchain. Он используется как стандартный компилятор для свободных UNIX-подобных операционных систем.

Изначально названный GNU C Compiler поддерживал только язык Си. Позднее GCC был расширен для компиляции исходных кодов на таких языках программирования, как C++, Objective-C, Java, Фортран, Ada и Go.

С версии 4.2.2 GCC перешёл на лицензию GPLv3.





Обзор

Начало GCC было положено Ричардом Столлманом, который реализовал первый вариант GCC в 1985 году на нестандартном и непереносимом диалекте языка Паскаль; позднее компилятор был переписан на языке Си Леонардом Тауэром (англ. Leonard H. Tower Jr.) и Ричардом Столлманом[2] и выпущен в 1987 году[3] как компилятор для проекта GNU, который сам по себе являлся свободным программным обеспечением. Разработка GCC курируется Free Software Foundation[4].

В настоящее время GCC поддерживается группой программистов со всего мира. GCC является лидером по количеству процессоров и операционных систем, которые он поддерживает.

Будучи официальным компилятором системы GNU, GCC также является главным компилятором для сборки ряда других операционных систем; среди них — различные варианты Linux и BSD, а также ReactOS, Mac OS X, OpenSolaris, NeXTSTEP, BeOS и Haiku.

GCC часто выбирается для разработки программного обеспечения, которое должно работать на большом числе различных аппаратных платформ. Различия между «родными» для каждой из аппаратных платформ компиляторами приводят к трудностям при разработке кода, который бы корректно компилировался разными компиляторами, а кроме того, при использовании различных компиляторов сильно усложняются сборочные скрипты, которые должны собирать ПО для всех аппаратных платформ. При использовании GCC для компиляции кода под разные платформы будет использован один и тот же синтаксический анализатор. Поэтому если удалось собрать программу для одной из целевых платформ, то велика вероятность, что программа нормально соберётся и для других платформ.

Языки

В версии 4.1.1 (выпущенной 24 мая 2006) стандартный компилятор включал в себя front-end’ы для языков:

Front end для CHILL был добавлен ранее, но из-за недостаточной поддержки был исключён из набора. До выхода версии 4.0 front-end’ом для Fortran был G77, который поддерживал лишь FORTRAN 77. В новых версиях G77 был исключён в пользу нового GFortran frontend, который поддерживает Fortran 95.

Также существуют front-end’ы для Pascal, D, Модула-2, Modula-3, Mercury, VHDL и PL/I.

Архитектуры

Список поддерживаемых GCC (для версии 4.3) процессоров включает в себя

Менее известные процессоры, поддерживаемые в стандартном релизе:

Дополнительные типы архитектур и процессоров, которые поддерживаются версиями GCC, но поддержкой которых занимаются сторонние организации (не Фонд свободного программного обеспечения):

Структура

Внешний интерфейс GCC является стандартом для компиляторов на платформе UNIX. Пользователь вызывает управляющую программу, которая называется gcc. Она интерпретирует аргументы командной строки, определяет и запускает для каждого входного файла свои компиляторы нужного языка, запускает, если необходимо, ассемблер и компоновщик.

Компилятор каждого языка является отдельной программой, которая получает исходный текст и порождает вывод на языке ассемблера. Все компиляторы имеют общую внутреннюю структуру: front end, который производит синтаксический разбор и порождает абстрактное синтаксическое дерево, и back end, который конвертирует дерево в Register Transfer Language[en] (RTL), выполняет различные оптимизации, затем порождает программу на языке ассемблера, используя архитектурно-зависимое сопоставление с образцом.

До версии 4.7.2 GCC был почти полностью написан на Си, хотя значительная часть front-end для Ады написана на Аде. С 14 августа 2012 года разработка была переведена на язык C++[7], версия 4.8[8] и более поздние требуют для своей сборки наличия C++ компилятора, поддерживающего С++ 2003.

Отладка программ, скомпилированных с помощью GCC

Главным инструментом для отладки программ, скомпилированных с помощью GCC, является GNU Debugger (gdb). Существуют также узкоспециализированные средства для отладки:

  • Valgrind для поиска утечек памяти
  • GNU Profiler (gprof (англ.)) используется для того, чтобы определить, сколько времени уходит на выполнение той или иной части программы, как часто вызываются те или иные процедуры; для использования gprof необходимо компилировать программу со специальными опциями для включения «профилирования».
  • gcov для анализа покрытия

Лицензия

GCC версии 4.2.1 стал последним релизом, выпущенным под GNU General Public License версии 2. Все последующие версии лицензируются по GPL версии 3[9].

Критика

Некоторые разработчики OpenBSD, например Тео де Раадт и Отто Мурбек (Otto Moerbeek), критикуют GCC, называя его «громоздким, глючным, медленным и генерирующим плохой код»[10]. По причине такого критического отношения, а также из-за довольно ограничивающей (по сравнению с BSD) лицензии GPL, под которой выпущена коллекция компиляторов, была предпринята попытка заменить в NetBSD и OpenBSD GCC другими компиляторами, например, PCC[11]. Аналогичная работа по замене GCC на Clang ведётся в FreeBSD[12].

См. также

Напишите отзыв о статье "GNU Compiler Collection"

Примечания

  1. [gcc.gnu.org/ml/gcc-announce/2016/msg00000.html GCC 6.1 Released]
  2. Stallman, Richard M. (February 1986). «[web.cecs.pdx.edu/~trent/gnu/bull/01/bull01.txt GNU Status]». GNU's Bulletin (Free Software Foundation) 1 (1). Проверено 2006-09-26.
  3. Tower, Leonard (1987) «[groups.google.com/group/comp.lang.misc/msg/32eda22392c20f98 GNU C compiler beta test release,]» comp.lang.misc USENET newsgroup; see also gcc.gnu.org/releases.html#timeline
  4. Stallman, Richard M. (2001) «[gcc.gnu.org/onlinedocs/gcc-2.95.3/gcc_23.html#SEC260 Contributors to GCC,]» in [gcc.gnu.org/onlinedocs/gcc-2.95.3/gcc.html#SEC_Top Using and Porting the GNU Compiler Collection (GCC)] for gcc version 2.95 (Cambridge, Mass.: Free Software Foundation)
  5. [gcc.gnu.org/gcc-4.6/changes.html#go GCC 4.6 Release Series — Changes, New Features, and Fixes — GNU Project — Free Software Foundation (FSF)]
  6. gcc.gnu.org/ "TI C6X processor support [2011-07-15] A port for the TI C6X family of processors "
  7. [gcc.gnu.org/wiki/cxx-conversion C++ Conversion. This project is a continuation of the build GCC in C++ project.] / GCC wiki, 2012  (англ.)
  8. [gcc.gnu.org/gcc-4.8/changes.html GCC 4.8 Release Series]: "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. "
  9. [kerneltrap.org/node/13975 Tools: GCC 4.2.1 Released — KernelTrap] (англ.). kerneltrap.org (21 июля 2007). Проверено 25 декабря 2009. [www.webcitation.org/65WTYZB0e Архивировано из первоисточника 17 февраля 2012].
  10. [www.thejemreport.com/content/view/369/ More on OpenBSD’s new compiler — Mambo]
  11. [it.toolbox.com/blogs/bsd-guru/towards-a-bsdlicensed-compiler-19289 Towards a BSD-licensed Compiler]
  12. [lists.freebsd.org/pipermail/freebsd-stable/2009-May/049873.html FreeBSD Status Reports January — March, 2009]

Литература

  • Артур Гриффитс. GCC. Настольная книга пользователей, программистов и системных администраторов. — Диасофт, 2004. — С. 624. — ISBN 966-7992-34-9.

Ссылки

  • [gcc.gnu.org/ Официальный сайт GCC.]
  • [www.kegel.com/crosstool/ Building and Testing gcc/glibc cross toolchains.]
  • [www.redhat.com/magazine/002dec04/features/gcc/ From Source to Binary: The Inner Workings of GCC]. Overview and explanation of gcc’s internal structure in Red Hat Magazine.
  • [www.bloodshed.net/ Dev-C++] — интегрированная среда, включающая в себя компилятор MinGW.
  • [www.codeblocks.org/ Code::Blocks] — ещё одна интегрированная среда разработки + компилятор MinGW.
  • [www.rsdn.ru/article/devtools/CppPerformance.xml Производительность компиляторов C++].
  • [www.ohloh.net/p/gcc GCC] на Ohloh.

Отрывок, характеризующий GNU Compiler Collection

– Да, Митенька, пожалуйста, чтоб чистенькие, – сказала графиня, грустно вздыхая.
– Ваше сиятельство, когда прикажете доставить? – сказал Митенька. – Изволите знать, что… Впрочем, не извольте беспокоиться, – прибавил он, заметив, как граф уже начал тяжело и часто дышать, что всегда было признаком начинавшегося гнева. – Я было и запамятовал… Сию минуту прикажете доставить?
– Да, да, то то, принеси. Вот графине отдай.
– Экое золото у меня этот Митенька, – прибавил граф улыбаясь, когда молодой человек вышел. – Нет того, чтобы нельзя. Я же этого терпеть не могу. Всё можно.
– Ах, деньги, граф, деньги, сколько от них горя на свете! – сказала графиня. – А эти деньги мне очень нужны.
– Вы, графинюшка, мотовка известная, – проговорил граф и, поцеловав у жены руку, ушел опять в кабинет.
Когда Анна Михайловна вернулась опять от Безухого, у графини лежали уже деньги, всё новенькими бумажками, под платком на столике, и Анна Михайловна заметила, что графиня чем то растревожена.
– Ну, что, мой друг? – спросила графиня.
– Ах, в каком он ужасном положении! Его узнать нельзя, он так плох, так плох; я минутку побыла и двух слов не сказала…
– Annette, ради Бога, не откажи мне, – сказала вдруг графиня, краснея, что так странно было при ее немолодом, худом и важном лице, доставая из под платка деньги.
Анна Михайловна мгновенно поняла, в чем дело, и уж нагнулась, чтобы в должную минуту ловко обнять графиню.
– Вот Борису от меня, на шитье мундира…
Анна Михайловна уж обнимала ее и плакала. Графиня плакала тоже. Плакали они о том, что они дружны; и о том, что они добры; и о том, что они, подруги молодости, заняты таким низким предметом – деньгами; и о том, что молодость их прошла… Но слезы обеих были приятны…


Графиня Ростова с дочерьми и уже с большим числом гостей сидела в гостиной. Граф провел гостей мужчин в кабинет, предлагая им свою охотницкую коллекцию турецких трубок. Изредка он выходил и спрашивал: не приехала ли? Ждали Марью Дмитриевну Ахросимову, прозванную в обществе le terrible dragon, [страшный дракон,] даму знаменитую не богатством, не почестями, но прямотой ума и откровенною простотой обращения. Марью Дмитриевну знала царская фамилия, знала вся Москва и весь Петербург, и оба города, удивляясь ей, втихомолку посмеивались над ее грубостью, рассказывали про нее анекдоты; тем не менее все без исключения уважали и боялись ее.
В кабинете, полном дыма, шел разговор о войне, которая была объявлена манифестом, о наборе. Манифеста еще никто не читал, но все знали о его появлении. Граф сидел на отоманке между двумя курившими и разговаривавшими соседями. Граф сам не курил и не говорил, а наклоняя голову, то на один бок, то на другой, с видимым удовольствием смотрел на куривших и слушал разговор двух соседей своих, которых он стравил между собой.
Один из говоривших был штатский, с морщинистым, желчным и бритым худым лицом, человек, уже приближавшийся к старости, хотя и одетый, как самый модный молодой человек; он сидел с ногами на отоманке с видом домашнего человека и, сбоку запустив себе далеко в рот янтарь, порывисто втягивал дым и жмурился. Это был старый холостяк Шиншин, двоюродный брат графини, злой язык, как про него говорили в московских гостиных. Он, казалось, снисходил до своего собеседника. Другой, свежий, розовый, гвардейский офицер, безупречно вымытый, застегнутый и причесанный, держал янтарь у середины рта и розовыми губами слегка вытягивал дымок, выпуская его колечками из красивого рта. Это был тот поручик Берг, офицер Семеновского полка, с которым Борис ехал вместе в полк и которым Наташа дразнила Веру, старшую графиню, называя Берга ее женихом. Граф сидел между ними и внимательно слушал. Самое приятное для графа занятие, за исключением игры в бостон, которую он очень любил, было положение слушающего, особенно когда ему удавалось стравить двух говорливых собеседников.
– Ну, как же, батюшка, mon tres honorable [почтеннейший] Альфонс Карлыч, – говорил Шиншин, посмеиваясь и соединяя (в чем и состояла особенность его речи) самые народные русские выражения с изысканными французскими фразами. – Vous comptez vous faire des rentes sur l'etat, [Вы рассчитываете иметь доход с казны,] с роты доходец получать хотите?
– Нет с, Петр Николаич, я только желаю показать, что в кавалерии выгод гораздо меньше против пехоты. Вот теперь сообразите, Петр Николаич, мое положение…
Берг говорил всегда очень точно, спокойно и учтиво. Разговор его всегда касался только его одного; он всегда спокойно молчал, пока говорили о чем нибудь, не имеющем прямого к нему отношения. И молчать таким образом он мог несколько часов, не испытывая и не производя в других ни малейшего замешательства. Но как скоро разговор касался его лично, он начинал говорить пространно и с видимым удовольствием.
– Сообразите мое положение, Петр Николаич: будь я в кавалерии, я бы получал не более двухсот рублей в треть, даже и в чине поручика; а теперь я получаю двести тридцать, – говорил он с радостною, приятною улыбкой, оглядывая Шиншина и графа, как будто для него было очевидно, что его успех всегда будет составлять главную цель желаний всех остальных людей.
– Кроме того, Петр Николаич, перейдя в гвардию, я на виду, – продолжал Берг, – и вакансии в гвардейской пехоте гораздо чаще. Потом, сами сообразите, как я мог устроиться из двухсот тридцати рублей. А я откладываю и еще отцу посылаю, – продолжал он, пуская колечко.
– La balance у est… [Баланс установлен…] Немец на обухе молотит хлебец, comme dit le рroverbe, [как говорит пословица,] – перекладывая янтарь на другую сторону ртa, сказал Шиншин и подмигнул графу.
Граф расхохотался. Другие гости, видя, что Шиншин ведет разговор, подошли послушать. Берг, не замечая ни насмешки, ни равнодушия, продолжал рассказывать о том, как переводом в гвардию он уже выиграл чин перед своими товарищами по корпусу, как в военное время ротного командира могут убить, и он, оставшись старшим в роте, может очень легко быть ротным, и как в полку все любят его, и как его папенька им доволен. Берг, видимо, наслаждался, рассказывая всё это, и, казалось, не подозревал того, что у других людей могли быть тоже свои интересы. Но всё, что он рассказывал, было так мило степенно, наивность молодого эгоизма его была так очевидна, что он обезоруживал своих слушателей.
– Ну, батюшка, вы и в пехоте, и в кавалерии, везде пойдете в ход; это я вам предрекаю, – сказал Шиншин, трепля его по плечу и спуская ноги с отоманки.
Берг радостно улыбнулся. Граф, а за ним и гости вышли в гостиную.

Было то время перед званым обедом, когда собравшиеся гости не начинают длинного разговора в ожидании призыва к закуске, а вместе с тем считают необходимым шевелиться и не молчать, чтобы показать, что они нисколько не нетерпеливы сесть за стол. Хозяева поглядывают на дверь и изредка переглядываются между собой. Гости по этим взглядам стараются догадаться, кого или чего еще ждут: важного опоздавшего родственника или кушанья, которое еще не поспело.
Пьер приехал перед самым обедом и неловко сидел посредине гостиной на первом попавшемся кресле, загородив всем дорогу. Графиня хотела заставить его говорить, но он наивно смотрел в очки вокруг себя, как бы отыскивая кого то, и односложно отвечал на все вопросы графини. Он был стеснителен и один не замечал этого. Большая часть гостей, знавшая его историю с медведем, любопытно смотрели на этого большого толстого и смирного человека, недоумевая, как мог такой увалень и скромник сделать такую штуку с квартальным.
– Вы недавно приехали? – спрашивала у него графиня.
– Oui, madame, [Да, сударыня,] – отвечал он, оглядываясь.
– Вы не видали моего мужа?
– Non, madame. [Нет, сударыня.] – Он улыбнулся совсем некстати.
– Вы, кажется, недавно были в Париже? Я думаю, очень интересно.
– Очень интересно..
Графиня переглянулась с Анной Михайловной. Анна Михайловна поняла, что ее просят занять этого молодого человека, и, подсев к нему, начала говорить об отце; но так же, как и графине, он отвечал ей только односложными словами. Гости были все заняты между собой. Les Razoumovsky… ca a ete charmant… Vous etes bien bonne… La comtesse Apraksine… [Разумовские… Это было восхитительно… Вы очень добры… Графиня Апраксина…] слышалось со всех сторон. Графиня встала и пошла в залу.
– Марья Дмитриевна? – послышался ее голос из залы.
– Она самая, – послышался в ответ грубый женский голос, и вслед за тем вошла в комнату Марья Дмитриевна.
Все барышни и даже дамы, исключая самых старых, встали. Марья Дмитриевна остановилась в дверях и, с высоты своего тучного тела, высоко держа свою с седыми буклями пятидесятилетнюю голову, оглядела гостей и, как бы засучиваясь, оправила неторопливо широкие рукава своего платья. Марья Дмитриевна всегда говорила по русски.
– Имениннице дорогой с детками, – сказала она своим громким, густым, подавляющим все другие звуки голосом. – Ты что, старый греховодник, – обратилась она к графу, целовавшему ее руку, – чай, скучаешь в Москве? Собак гонять негде? Да что, батюшка, делать, вот как эти пташки подрастут… – Она указывала на девиц. – Хочешь – не хочешь, надо женихов искать.
– Ну, что, казак мой? (Марья Дмитриевна казаком называла Наташу) – говорила она, лаская рукой Наташу, подходившую к ее руке без страха и весело. – Знаю, что зелье девка, а люблю.
Она достала из огромного ридикюля яхонтовые сережки грушками и, отдав их именинно сиявшей и разрумянившейся Наташе, тотчас же отвернулась от нее и обратилась к Пьеру.