Операційна система (ОС) 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, наприклад: . Результатом компіляції є файл, що містить об'єктний модуль, його ім'я збігається з ім'ям вихідного модуля, а розширення - .o, наприклад: hello.o. Для файлу, що містить виконуваний модуль стандартного розширення не існує. При компіляції програми, яка складається з єдиного вихідного модуля, об'єктний модуль автоматично видаляється після створення компілятором модуля.
Загальний формат команди виклику компілятора має наступний вигляд (компілювання в linux):
gcc [опції] [выходной_файл] файл1 [файл2 :]
Найбільш уживані параметри компілятора наступні:
-c |
Пригнічує фазу редагування зв'язків, створює об'єктний модуль для кожного вихідного модуля з перерахованих у параметрах виклику. Выходной_файл з цією опцією не задається. Опція може застосовуватися разом з опцією -I |
  |   |
-o |
Компіляція та редагування зв'язків. Створює об'єктний модуль для кожного вихідного модуля з перерахованих у параметрах виклику і мають розширення .c. Файли з розширенням .c розглядаються як вихідні модулі і компілюються; файли, що мають розширення .o, розглядаються як об ’ єктні модулі і підключаються при редагуванні зв'язків. Параметр выходной_файл задає ім'я файлу модуля. Опція може застосовуватися разом з опціями -L, -l, -I. |
  |   |
-L каталог |
Додати каталог у список каталогів, які містять об'єктні бібліотечні модулі. |
  |   |
-l бібліотека |
При редагуванні зв'язків підключити модулі з бібліотеки. |
  |   |
-I каталог |
Шукати включаються (#include) файли, назви яких починаються не з / спочатку в каталозі, а лише потім - в стандартних каталогах для включення файлів. |
  |   |
-E |
Виконати обробку зазначених вихідних модулів тільки препроцессором, результат направляється у стандартний вивід. Выходной_файл з цією опцією не задається. Опція може застосовуватися разом з опцією -I. |
  |   |
-w |
Придушити видачу попереджувальних повідомлень.
|
Приклади використання компілятора:
gcc hello.c |
Компіляція вихідного модуля з видачею повідомлень про помилки на стандартний вивід. Файл об ’ єктного коду не створюється. |
  |   |
gcc-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. Файл об ’ єктного коду не створюється.
|