Основным C-компилятором в Linux служит gcc (GNU С Compiler). Если вы не установили средства разработки при установке дистрибутива, самое время сделать это сейчас. Запустите менеджер пакетов (рис. 21.1) и установите следующие пакеты:
♦ gcc
— сам компилятор gcc;♦ gcc-c++
— поддержка С++;♦ gcc-doc
— документация по gcc (очень рекомендую установить);♦ compat-gcc
— пакет, содержащий средства gcc для обратной совместимости. Данный пакет вам нужен, если вы планируете писать программы для более старых систем, чем ваша;♦ compat-gcc-c++
— то же, что и compat-gcc, только с поддержкой С++;♦ compat-cpp
— препроцессор cpp для обратной совместимости;♦ binutils
— набор вспомогательных утилит, о которых мы поговорим в последнем пункте этой главы;♦ glibc-devel
— содержит библиотеки для разработки C-программ;♦ libbfd
— библиотека дескриптора двоичного файла (Binary File Descriptor library);♦ libstdc++-devel
— заголовочные файлы и библиотеки для программирования на С++;♦ make
— утилита, упрощающая процесс сборки больших проектов.Рис. 21.1
. Менеджер пакетов Fedora Core — system-config-packages21.1.1. Вызов gcc
Формат вызова компилятора такой:
gcc [опции] helloworld.с
Вы написали свою программу на С++? Нет проблем: компиляторы С и С++ являются интегрированными. Чтобы сообщить компилятору, на каком языке вы писали свою программу, нужно указать определенную опцию при вызове компилятора. Но можно поступить проще: по умолчанию компилятор считает, что файлы с расширением .с написаны на языке С, файлы с одним из расширений .C, .cc, .cXX — на языке С++, а файлы с расширением .s — на языке ассемблера.
Как правило, перед компиляцией вызывается программа cpp
— препроцессор языка С. Препроцессор создаст файл с расширением .i, если ваша программа написана на языке С. и файл с расширением .ii, если ваша программа написана на С++. Если ваша программа уже прошла препроцессорную подготовку, вы можете передать компилятору gcc файл с расширением .i или .ii и gcc уже не будет вызывать препроцессор для подготовки исходного текста. Как правило, программу cpp редко кто вызывает вручную.Если не указывать никаких опций, то компилятор создаст в текущем каталоге файл a.out, содержащий исполняемый код. Для тех, кто изучал другой язык, я на всякий случай приведу текст первой программы на С (листинг 21.1).
Листинг 21.1. Файл helloworld.c
#include
main() {
printf("Hello World!\n");
}
А сейчас рассмотрим основные опции компилятора. Обо всех остальных опциях вы сможете узнать по команде man gcc
21.1.2. Общие опции
Из общих опций наиболее интересны три: -х, -с и -о.
С помощью опции -х можно указать язык, на котором написан исходный код, например,
gcc -х с helloworld.c
В качестве языка программы вы можете указать:
♦ с
, если ваша программа написана на С;♦ objective_c
, если ваша программа написана на Objective С;♦ c-header
, если ваша программа является заголовком С;♦ C++
, если вы написали программу на С++;♦ assembler
, если вы написали программу на ассемблере.Существуют и другие варианты, но они не столь важны.
Опция -c
используется, если вы хотите только откомпилировать вашу программу, но не вызвать компоновщик. В результате будет создан объектный файл с расширением.о
.Опция -о
позволяет указать имя результирующего файла. Это очень полезная опция, потому что имяa.out
мало кого устраивает:gcc -о helloworld helloworld.c
Очень полезна опция -v
, которая выводит различную информацию о стадиях компиляции. Кроме того, эта опция выводит версию компилятора.21.1.3. Опции языка
Из всех опций языка мне пригодилась лишь опция ANSI, которая выключает все функции GNU С, несовместимые со стандартом ANSI. К таким функциям относятся asm
, inline, typeof и другие.21.1.4. Опции препроцессора
Эти опции задают режим предварительной обработки исходного кода (до собственно компиляции).
Очень важной является опция -include <файл>
. Она позволяет «прогнать» через препроцессор сперва содержимое указанного файла, а только после этого файл, который передан препроцессору. В результате указанный файл будет откомпилирован раньше, чем все остальные.Опция -nostdinc
запрещает использование системного каталога, содержащего файлы заголовков. При ее включении компилятор будет искать заголовки в каталогах, указанных в опции -I и в текущем каталоге.Опция -nostdinc++
запрещает использование стандартных файлов заголовков для языка С++.21.1.5. Опции компоновщика
Опция компоновщика -l
позволяет явно указать имя библиотеки, которая будет использоваться при сборке вашей программы. Например,gcc -lmylibrary myfile.c