Операционная система (ОС) Linux/Unix и язык C - "близненцы-братья". Вспомните, что язык программирования C был создан (Д.Ритчи, 1972 г) специально для написания ОС Unix, и с тех пор и "каноническая" ОС Unix, а также все ее клоны и подобные ей ОС пишутся на языке C. Поэтому во всех версиях Unix и Unix-подобных систем компилятор языка C в большинстве случаев входит в комплект поставки системы.
Одним из первых программных продуктов, созданных в рамках проекта GNU, также явился компилятор языка С с открытым кодом. Этот компилятор включается в поставку всех версий ОС Linux.
Таким образом, среда, в которой выполняется наш лабораторный практикум предоставляет в Ваше распоряжение 4 компилятора на выбор:
- cc - стандартный компилятор языка C;
- c++ - стандартный компилятор языка C++;
- gcc - GNU-компилятор языка C;
- g++ - GNU-компилятор языка C++.
Способы запуска и подавляющее большинство опций всех указанных компиляторов идентичны, выбор того или иного компилятора отражается только на имени команды. Мы при подготовке лабораторного практикума использовали компилятор gcc, поэтому в дальнейших примерах будем говорить именно о нем.
Компилятор языка C выполняет как собственно компиляцию - перевод исходного текста на машинный язык, результатом чего является объектный модуль, так и редактирование связей - сборку из нескольких объектных модулей (в том числе, и библиотечных) исполняемого модуля.
Файлы с исходными текстами C-программ должны иметь расширение .c, например: hello.c. Результатом компиляции является файл, содержащий объектный модуль, его имя совпадает с именем исходного модуля, а расширение - .o, например: hello.o. Для файла, содержащего исполняемый модуль стандартного расширения не существует. При компиляции программы, состоящей из единственного исходного модуля, объектный модуль автоматически удаляется после создания компилятором исполняемого модуля.
Общий формат команды вызова компилятора имеет следующий вид (компилирование в linux):
gcc [опции] [выходной_файл] файл1 [файл2 :]
Наиболее часто употребляемые опции компилятора следующие:
-c |
Подавляет фазу редактирования связей, создает объектный модуль для каждого исходного модуля из перечисленных в параметрах вызова. Выходной_файл с этой опцией не задается. Опция может применяться вместе с опцией -I |
  |   |
-o |
Компиляция и редактирование связей. Cоздает объектный модуль для каждого исходного модуля из перечисленных в параметрах вызова и имеющих расширение .c. Файлы с расширением .c рассматриваются как исходные модули и компилируются; файлы, имеющие расширение .o, рассматриваются как объектные модули и подключаются при редактировании связей. Параметр выходной_файл задает имя файла исполняемого модуля. Опция может применяться вместе с опциями -L, -l, -I. |
  |   |
-L каталог |
Добавить каталог в список каталогов, которые содержат объектные библиотечные модули. |
  |   |
-l библиотека |
При редактировании связей подключить модули из библиотеки. |
  |   |
-I каталог |
Искать включаемые (#include) файлы, имена которых не начинаются с / сначала в каталоге, а лишь затем - в стандартных каталогах для включаемых файлов. |
  |   |
-E |
Выполнить обработку указанных исходных модулей только препроцессором, результат направляется в стандартный вывод. Выходной_файл с этой опцией не задается. Опция может применяться вместе с опцией -I. |
  |   |
-w |
Подавить выдачу предупреждающих сообщений.
|
Примеры использования компилятора:
gcc hello.c |
Компиляция исходного модуля hello.c с выдачей сообщений об ошибках на стандартный вывод. Файл объектного модуля не создается. |
  |   |
gcc -c hello.c |
Компиляция исходного модуля hello.c с выдачей сообщений об ошибках на стандартный вывод. При успешной компиляции объектный модуль записывается в файл hello.o. |
  |   |
gcc -o hello hello.o |
Редактирование связей для объектного модуля hello.o, исполняемый модуль записывается в файл hello. |
  |   |
gcc -o hello hello.o hello1.c |
Создание исполняемого модуля в файле hello из объектного модуля hello.o и модуля hello1.c (последний модуль является исходным, он предварительно компилируется. |
  |   |
gcc -o hello hello.o hello1.o -l hellolib |
Создание исполняемого модуля в файле hello из объектных модулей hello.o и hello1.o c с подключением объектных модулей из библиотеки hellolib. |
  |   |
gcc -o hello hello1.с -lm |
Создание исполняемого модуля в файле hello из исходного модуля hello.с с выдачей сообщений об ошибках на стандартный вывод с подключением бибилиотеки math.h. Файл объектного модуля не создается.
|