Компилятор GCC
GСС — это свободно доступный оптимизирующий компилятор для языков C, C++.
Программа gcc, запускаемая из командной строки, представяляет собой надстройку над группой компиляторов. В зависимости от расширений имен файлов, передаваемых в качестве параметров, и дополнительных опций, gcc запускает необходимые препроцессоры, компиляторы, линкеры.
Файлы с расширением .cc или .C рассматриваются, как файлы на языке C++, файлы с расширением .c как программы на языке C, а файлы c расширением .o считаются объектными.
Чтобы откомпилировать исходный код C++, находящийся в файле F.cc, и создать объектный файл F.o, необходимо выполнить команду:
gcc -c F.cc
Опция –c означает «только компиляция».
Чтобы скомпоновать один или несколько объектных файлов, полученных из исходного кода — F1.o, F2.o, . — в единый исполняемый файл F, необходимо ввести команду:
gcc -o F F1.o F2.o
Опция -o задает имя исполняемого файла.
Можно совместить два этапа обработки — компиляцию и компоновку — в один общий этап с помощью команды:
gcc -o F F1.cc . -lg++
— возможные дополнительные опции компиляции и компоновки. Опция –lg++ указывает на необходимость подключить стандартную библиотеку языка С++, — возможные дополнительные библиотеки.
После компоновки будет создан исполняемый файл F, который можно запустить с помощью команды
— список аргументов командной строки Вашей программы.
В процессе компоновки очень часто приходится использовать библиотеки. Библиотекой называют набор объектных файлов, сгруппированных в единый файл и проиндексированных. Когда команда компоновки обнаруживает некоторую библиотеку в списке объектных файлов для компоновки, она проверяет, содержат ли уже скомпонованные объектные файлы вызовы для функций, определенных в одном из файлов библиотек. Если такие функции найдены, соответствующие вызовы связываются с кодом объектного файла из библиотеки. Библиотеки могут быть подключены с помощью опции вида -lname . В этом случае в стандартных каталогах, таких как /lib , /usr/lib, /usr/local/lib будет проведен поиск библиотеки в файле с именем libname.a. Библиотеки должны быть перечислены после исходных или объектных файлов, содержащих вызовы к соответствующим функциям.
Опции компиляции
Среди множества опций компиляции и компоновки наиболее часто употребляются следующие:
| Опция | Назначение |
| -c | Эта опция означает, что необходима только компиляция. Из исходных файлов программы создаются объектные файлы в виде name.o. Компоновка не производится. |
| -Dname=value | Определить имя name в компилируемой программе, как значение value. Эффект такой же, как наличие строки #define name value в начале программы. Часть =value может быть опущена, в этом случае значение по умолчанию равно 1. |
| -o file-name | Использовать file-name в качестве имени для создаваемого файла. |
| -lname | Использовать при компоновке библиотеку libname.so |
| -Llib-path -Iinclude-path |
Добавить к стандартным каталогам поиска библиотек и заголовочных файлов пути lib-path и include-path соответственно. |
| —g | Поместить в объектный или исполняемый файл отладочную информацию для отладчика gdb. Опция должна быть указана и для компиляции, и для компоновки. В сочетании –g рекомендуется использовать опцию отключения оптимизации –O0 (см.ниже) |
| -MM | Вывести зависимости от заголовочных файлов , используемых в Си или С++ программе, в формате, подходящем для утилиты make. Объектные или исполняемые файлы не создаются. |
| -pg | Поместить в объектный или исполняемый файл инструкции профилирования для генерации информации, используемой утилитой gprof. Опция должна быть указана и для компиляции, и для компоновки. Собранная с опцией -pg программа при запуске генерирует файл статистики. Программа gprof на основе этого файла создает расшифровку, указывающую время, потраченное на выполнение каждой функции. |
| -Wall | Вывод сообщений о всех предупреждениях или ошибках, возникающих во время компиляции программы. |
| -O1 -O2 -O3 |
Различные уровни оптимизации. |
| -O0 | Не оптимизировать. Если вы используете многочисленные -O опции с номерами или без номеров уровня, действительной является последняя такая опция. |
| -I | Используется для добавления ваших собственных каталогов для поиска заголовочных файлов в процессе сборки |
| -L | Передается компоновщику. Используется для добавления ваших собственных каталогов для поиска библиотек в процессе сборки. |
| -l | Передается компоновщику. Используется для добавления ваших собственных библиотек для поиска в процессе сборки. |
Страны GCC
GCC — это название регионального союза шести арабских государств на Аравийском полуострове: Саудовская Аравия, ОАЭ, Кувейт, Катар, Оман и Бахрейн.
Чем интересен регион для бизнеса?
В GCC входят ведущие экономики Ближнего Востока, объединенные в общий региональный рынок по аналогии с ЕС и ЕАЭС. ВВП государств GCC превышает 3,6 трлн долларов США, в регионе проживает более 65 миллионов человек.
Экономическая стабильность государств GCC основана на доходах от нефтегазовой отрасли и колоссальных запасах углеводородного сырья. Вместе с тем страны региона развивают собственную промышленность и инфраструктуру, предъявляя высокий спрос на зарубежную продукцию и технологии. Высокие доходы населения стимулируют растущее потребление товаров и услуг.
География и политическое устройство союза GCC
Все государства GCC имеют выход к Персидскому заливу. Аббревиатура GCC происходит от английского Gulf Cooperation Council (Совет сотрудничества залива). На русском языке официальное название объединения – Совет сотрудничества арабских государств Персидского залива (ССАГПЗ).
Объединение стран GCC было создано в 1981 году в Эр-Рияде, столице Саудовской Аравии, где в настоящее время располагается его штаб-квартира. Основная цель союза — развитие экономического и политического сотрудничества между странами.
Все государства-члены GCC являются монархиями. Географическая близость государств ССАГПЗ и сходство их политических и законодательных систем, а также экономических и социальных условий сыграли значительную роль в объединении стран региона. Высшим органом принятия решений в GCC является Высший совет, который собирается на ежегодной основе и состоит из глав государств GCC.
Единое экономическое пространство GCC
Страны проводят совместную политику по экономической интеграции. Государства GCC объединены общим таможенным пространством, единой системой электроэнергетики. В регионе реализуется программы развития совместной транспортной инфраструктуры, в т.ч. железнодорожной. Правительства стран региона координируют единую налоговую и таможенную политику союза. Страны GCC ведут постоянную работу по созданию общей системы и унификации отраслевых стандартов.
Сотрудничество стран GCC c Россией
Россия активно сотрудничает со странами GCC как в политической, так и в экономической сфере. Регулярно проходят встречи высшего руководства России с главами государств стран GCC. В последние годы наблюдается рост экспорта российской продукции в ОАЭ, Саудовскую Аравию и другие страны регионы. Реализуются масштабные инвестиционные проекты с участием России и стран GCC.
Что такое gcc
GCC — это свободно доступный оптимизирующий компилятор для языков C, C++, Ada 95, а также Objective C. Его версии применяются для различных реализаций Unix (а также VMS, OS/2 и других систем PC), и позволяют генерировать код для множества процессоров.
Вы можете использовать gcc для компиляции программ в объектные модули и для компоновки полученных модулей в единую исполняемую программу. Компилятор способен анализировать имена файлов, передаваемые ему в качестве аргументов, и определять, какие действия необходимо выполнить. Файлы с именами типа name.cc (или name.C ) рассматриваются, как файлы на языке C++, а файлы вида name.o считаются объектными (т.е. внутримашинным представлением).
Чтобы откомпилировать исходный код C++, находящийся в файле F.cc , и создать объектный файл F.o , выполните команду:
Здесь строка compile-options указывает возможные дополнительные опции компиляции.
Чтобы скомпоновать один или несколько объектных файлов, полученных из исходного кода C++ — F1.o, F2.o, . — в единый исполняемый файл F, используйте команду:
Здесь строка link-options означает возможные дополнительные опции компоновки, а строка other-libraries — подключение при компоновке дополнительных разделяемых библиотек.
Вы можете совместить два этапа обработки — компиляцию и компоновку — в один общий этап с помощью команды:
После компоновки будет создан исполняемый файл F, который можно запустить с помощью команды:
где строка arguments определяет аргументы командной строки вашей программы.
В процессе компоновки очень часто приходится использовать библиотеки. Библиотекой называют набор объектных файлов, сгруппированных в единый файл и проиндексированных. Когда команда компоновки обнаруживает некоторую библиотеку в списке объектных файлов для компоновки, она проверяет, содержат ли уже скомпонованные объектные файлы вызовы для функций, определенных в одном из файлов библиотек. Если такие функции найдены, соответствующие вызовы связываются с кодом объектного файла из библиотеки.
Библиотеки обычно определяются через аргументы вида
-llibrary-name . В частности, -lg++ означает библиотеку стандартных функций C++, а -lm определяет библиотеку различных математических функций (sin, cos, arctan, sqrt, и т.д.). Библиотеки должны быть перечислены после исходных или объектных файлов, содержащих вызовы к соответствующим функциям.
Среди множества опций компиляции и компоновки наиболее часто употребляются следующие: -c
Только компиляция. Из исходных файлов программы создаются объектные файлы в виде name.o . Компоновка не производится.
Определить имя name в компилируемой программе как значение value . Эффект такой же, как наличие строки
#define name value
в начале программы. Часть `=value’ может быть опущена, в этом случае значение по умолчанию равно 1.
Использовать file-name в качестве имени для создаваемого gcc файла (обычно это исполняемый файл).
Использовать при компоновке указанную библиотеку.
Поместить в объектный или исполняемый файл отладочную информацию для отладчика gdb . Опция должна быть указана и для компиляции, и для компоновки.
Вывести заголовочные файлы (но не стандартные заголовочные), используемые в каждом исходном файле, в формате, подходящем для утилиты make . Не создавать объектные или исполняемые файлы.
Поместить в объектный или исполняемый файл инструкции профилирования для генерации информации, используемой
утилитой gprof . Опция должна быть указана и для компиляции, и для компоновки. Профилирование — это процесс измерения продолжительности выполнения отдельных участков вашей программы. Когда вы указываете -pg , полученная исполняемая программа при запуске генерирует файл статистики. Программа gprof на основе этого файла создает расшифровку, указывающую время, затраченное на выполнение каждой функции.
Вывод сообщений о всех предупреждениях или ошибках, возникающих во время трансляции программы.
Устанавливает оптимизацию уровня 1. Оптимизированная трансляции требует несколько больше времени и несколько больше памяти для больших функций. Без указания опций `-O’ цель компилятора состoит в том, чтобы уменьшить стоимость трансляции и выдать ожидаемые результаты при отладке. Операторы независимы: если вы останавливаете программу на контрольной точке между операторами, то можете назначить новое значение любой переменной или поставить счетчик команд на любой другой оператор в функции и получить точно такие результаты, которые вы ожидали от исходного текста. С указанием `-O’ компилятор пробует уменьшить размер кода и время исполнения.
Устанавливает оптимизацию уровня 2. GNU CC выполняет почти все поддерживаемые оптимизации, которые не включают уменьшение времени исполнения за счет увеличения длины кода. Компилятор не выполняет раскрутку циклов или подстановку функций, когда вы указываете `-O2′ . По сравнения с `-O’ эта опция увеличивает как время компиляции, так и эффективность сгенерированного кода.
Устанавливает оптимизацию уровня 3. `-O3′ включает все оптимизации, определяемые `-O2′ , а также включает опцию `inline-functions’ .
Без оптимизации. Если вы используете многочисленные `-O’ опции с номерами или без номеров уровня, действительной является последняя такая опция.
Что такое компилятор GCC и как его использовать?

Компилятор GCC — это инструмент, который фактически является сборкой компиляторов для программ, написанных на различных языках программирования. Создан он был давно и активно используется разработчиками по всему миру.
Изначально идея GCC заключалась в создании единого пакета программного обеспечения под одной лицензией, которая не позволяла присвоить кому-либо эксклюзивные права на владение данным ПО. Сейчас же данный компилятор используется в качестве стандартного решения для операционных систем семейства Unix и позволяет компилировать программы, написанные на C++, Objective-C, Java, Фортран, Ada и Go.
Если вы впервые сталкиваетесь с этим инструментом, то установка компилятора GCC и его настройка может вызвать определенные трудности. И чтобы они не возникли, далее мы рассмотрим эти процессы подробнее.
Установка компилятора GCC
Чтобы установка компилятора GCC на Ubuntu или любую другую Unix-систему прошла успешно, выполните простую последовательность действий:
- Убедитесь, что ваша система поддерживается нужной вам версией компилятора.
- Скачайте необходимую версию компилятора с официального репозитория.
- Распакуйте и установите выбранную версию компилятора GCC для вашей операционной системы.
- Выполните установку дополнительных компонентов компилятора.
- Настройте GCC в соответствии с вашими требованиями и под вашу операционную систему.
После этого можно считать, что компилятор GCC на Linux установлен. Как уже упоминалось выше, последний этап (настройка) может вызвать сложности, поэтому давайте рассмотрим его подробнее.
GCC-компиляция на Linux: параметры настройки
Конечно, программисту совершенно необязательно знать все доступные опции компилятора GCC, ведь их довольно-таки много. Тем не менее, наиболее часто используемый список под рукой никогда не помешает, ведь данный инструмент позволяет управлять процессом компиляции практически на любом этапе.
В целом параметры компиляции GCC условно можно разделить на две группы. Первая — это так называемые общие настройки, к которым можно отнести:
- @file, где file — нужное имя файла. Выполняет считывание опций из выбранного файла.
- -x language, где language — нужный язык программирования. Принудительно устанавливает выбранный язык программирования.
- -o file — вывод результатов работы.
- -c — прервать работу после компиляции.
- -E — прервать работу после препроцессинга.
- -S — прервать работу после компиляции, но в результате будет выведен код на Ассемблере.
- -v — напечатать команды, которые выполняет компилятор, а также указать его версию.
- —help — вывести основную справку компилятора.
Ко второй группе опций компиляции можно отнести настройки оптимизации, такие как:
- -fno-defer-pop — убрать аргументы из стека функции сразу после выполнения самой функции.
- -fforward-propagate — по возможности упрощать пары инструкций.
- -fauto-inc-dec — если инструкции инкремента и деинкремента отсутствуют, то использовать машинные инструкции.
- -fbranch-count-reg- не использовать инструкции, которые одновременно используют инкремент и деинкремент. Вместо этого — генерировать последовательность инструкций, которые будут выполнять необходимые действия.
- -fcombine-stack-adjustments — оптимизация операций с текстом.
- -fcompare-elim — по возможности избегать инструкций, которые обращаются к флагам процессора.
Теперь вы имеете представление о том, для чего используется GCC-компиляция на Linux и других Unix-системах, а также какие у нее существуют параметры настройки. Для более быстрой компиляции, мы рекомендует заказать выделенный сервер с мощными ресурсами. Остались вопросы? Вы можете задать их специалисту техподдержки RigWEB и получить ответ в течение всего 30 минут.
Создавайте оригинальные программные решения для своих сайтов и пользуйтесь профессиональным хостингом для их размещения в интернете!