GNU Compiler Collection
Материал из Википедии — свободной энциклопедии
GCC, управление в командной строке
|
|
Тип | Компилятор |
Разработчик | The GNU Project |
ОС | Кроссплатформенное программное обеспечение |
Текущая версия | 4.1.1 — 24 мая 2006 |
Лицензия | GPL |
Сайт | gcc.gnu.org |
GNU Compiler Collection (обычно используется сокращение GCC) — набор компиляторов для различных языков программирования, разработанный в рамках проекта GNU. GCC является свободным программным оеспечением, распространяется фондом свободного программного обеспечения (FSF) на условиях GNU GPL и GNU LGPL и является ключевым компонентом GNU toolchain. Он используется как стандартный компилятор для свободных Unix-подобных операционных систем, и в нескольких проприетарных операционных системах, в том числе Apple Mac OS X.
Изначально названный GNU C Compiler, он подерживал только язык C. Познее, GCC был расширен для компиляции исходных кодов на таких языках программирования как C++, Objective-C, Java, Fortran, и Ada.
Содержание |
[править] Обзор
Начало GCC было положено Ричардом Столмэном, который реализовал первый вариант GCC в 1985 на нестандартном и непереносимом диалекте языка Паскаль; познее компилятор был переписан на языке Си Леонардом Тауэром (англ. Leonard H. Tower Jr.) и Р. Столмэном, [1] и выпущен в 1987[2] как компилятор для проекта GNU, который сам по себе являлся свободным программным обесепечением. Разработка GCC курируется Free Software Foundation.[3]
В настоящее время GCC поддерживается группой программистов со всего мира. GCC является лидером по количеству процессоров и операционных систем, которые он поддерживает.
Будучи официальным компилятором системы GNU, включая варианты системы, построенные на ядре Linux (GNU/Linux), GCC также является главным компилятором для сборки ряда других операционных систем, среди них: различные варианты BSD, Mac OS X, NeXTSTEP и BeOS.
GCC часто выбирается для разработки программного обеспечения, которое должно работать на большом числе различных аппаратных платформ. Различия между «родными» для каждой из аппаратных платформ компиляторами приводят к трудностям при разработке кода, который бы корректно компилировался разными компиляторами, а кроме того, при использовании различных компиляторов сильно усложняются сборочные скрипты, которые должны собирать ПО для всех аппаратных платформ. При использовании GCC для компиляции кода для разных платформ, будет использован один и тот же синтаксический анализатор, таки образом, если удалось собрать программу для одной из целевых платформ, то велика вероятность, что программа нормально соберётся и для других платформ.
[править] Языки
В версии 4.1.1 (выпущенной 24 мая, 2006), стандартный компилятор включал в себя front-end’ы для:
- Ada (GCC для Ada aka GNAT)
- C
- C++ (GCC для C++ aka G++)
- Fortran (GCC для Fortran aka GFortran)
- Java (GCC для Java aka GCJ)
- Objective-C
- Objective-C++
Front end для CHILL был добавлен ранее, но из-за недостаточно поддержки был исключен из набора. До релиза версии 4.0 front-end’ом для Fortran был G77, который поддерживал лишь Fortran 77. В новых версиях G77 был исключен в пользу нового GFortran frontend который поддерживает Fortran 95.
Так же существуют front-end’ы для Pascal, D, Modula-2, Modula-3, Mercury, VHDL и PL/I.
[править] Архитектуры
Список поддерживаемых GCC (для версии 4.1) процессоров включает в себя:
- Alpha
- ARM
- Atmel AVR
- Blackfin
- H8/300
- System/370, System/390
- IA-32 (x86) и x86-64)
- IA-64 в том числе и «Itanium»
- Motorola 68000
- Motorola 88000
- MIPS
- PA-RISC
- PDP-11
- PowerPC
- SuperH
- HC12
- SPARC
- VAX
- семейство Renesas R8C/M16C/M32C
- семейство MorphoSys
Список менее известных процессоров, поддерживаемых в стандартном релизе, включает в себя A29K, ARC, C4x, CRIS, D30V, DSP16xx, FR-30, FR-V, Intel i960, IP2000, M32R, 68HC11, MCORE, MMIX, MN10200, MN10300, NS32K, ROMP, Stormy16, V850, и Xtensa. Расширеный набор процессоров, таких как D10V, PDP-10, MicroBlaze, MSP430 и Z8000, поддерживаются версиями GCC, поддержкой которых занимаются сторонние организации (не FSF).
[править] Структура
Внешний интерфейс GCC является стандартом для компиляторов на платформе Unix. Пользователь вызывает управляющую программу, которая называется gcc. Она интерпретирует аргументы командной строки, определяет и запускает для каждого входного файла свои компиляторы нужного языка, запускает, если необходимо, ассемблер и компоновщик.
Компилятор каждого языка является отдельной программой, которая получает исходный текст и порождает вывод на языке ассемблера. Все компиляторы имеют общую внутреннюю структуру: front end, который производит синтаксический разбор и порождает абстрактное синтаксическое дерево, и back end, который конвертирует дерево в Register Transfer Language (RTL), выполняет различные оптимизации, затем порождает программу на языке ассемблера, используя архитектурно-зависимое сопоставление с образцом.
GCC почти полностью написан на Си, хотя значитальная часть front-end для Ады написана на Ада.
[править] Отладка программ, скомпилированных с помощью GCC
Главным инструментом для отладки программ, скомпилированных с помощью GCC, является GNU Debugger (gdb). Существуют также узкоспециализированные средства для отладки:
- Valgrind для поиска утечек памяти
- GNU Profiler (gprof) используется для того, чтобы определить, сколько времени уходит на выполнение той или иной части программы, как часто вызываются те или иные процедуры; для использования gprof необходимо компилировать программу со специальными опциями для включения «профилирования».
[править] Литература
- Артур Гриффитс GCC. Настольная книга пользователей, программистов и системных администраторов. — Диасофт, 2004. — С. 624. ISBN 966-7992-34-9
[править] См. также
[править] Ссылки
- Домашняя страница GCC
- Руководство по GCC версии 4.1
- Руководство по GCC версии 4.0
- Руководство по GCC версии 3.4.6
- Building and Testing gcc/glibc cross toolchains
- GCC Wiki
- GCC Forum — hosted by Nabble archiving all gcc mailing lists into a searchable forum.
- From Source to Binary: The Inner Workings of GCC Overview and explanation of gcc’s internal structure in Red Hat Magazine
- GCC for MVS 3.8, MVS/XA, OS/390 (z/OS)