Основным 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-packages
21.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
Вильям Л Саймон , Вильям Саймон , Наталья Владимировна Макеева , Нора Робертс , Юрий Викторович Щербатых
Зарубежная компьютерная, околокомпьютерная литература / ОС и Сети, интернет / Короткие любовные романы / Психология / Прочая справочная литература / Образование и наука / Книги по IT / Словари и Энциклопедии