Статьи

компілятор GCC


Next: Основні групи системних функцій Up: Засоби програмування в ОС Previous: Засоби програмування в ОС Contents Index

Gcc - це вільно доступний оптимізуючий компілятор для мов C, C ++, Ada 95, а також Objective C. Його версії існують для різних реалізацій Unix (а також VMS, OS / 2 і інших систем PC), і дозволяють генерувати код для безлічі процесорів.

Ви можете використовувати gcc для компіляції програм в об'єктні модулі і для компонування отриманих модулів в єдину виконувану програму. Компілятор здатний аналізувати імена файлів, що передаються йому в якості аргументів, і визначати, які дії необхідно виконати. Файли з іменами типу name.cc (або name.C) розглядаються, як файли на мові C ++, а файли виду name.o вважаються об'єктними (тобто, Внутримашинное поданням).

Щоб відкомпілювати вихідний код C ++, що знаходиться в файлі F.cc, і створити об'єктний файл Fo, виконайте команду:

gcc -c <compile-options> F .cc

Тут рядок compile-options вказує можливі додаткові опції компіляції.

Щоб скомпонувати один або кілька об'єктних файлів, отриманих з вихідного коду C ++ - F1.o, F2.o, ... - в єдиний виконуваний файл F, використовуйте команду:

gcc -o F <link-options> F1.o F2.o ... -lg ++ <other-libraries>

Тут рядок link-options означає можливі додаткові опції компонування, а рядок other-libraries - підключення при компонуванні додаткових поділюваних бібліотек.

Ви можете поєднати два етапи обробки - компіляцію і компонування - в один загальний етап за допомогою команди:

gcc -o F <compile-and-link-options> F1.cc ... -lg ++ <other-libraries>

Після компонування буде створений виконуваний файл F, який можна запустити з допомогою команди

./F <arguments>,

де рядок arguments визначає аргументи командного рядка Вашої програми.

В процесі компонування дуже часто доводиться використовувати бібліотеки. Бібліотекою називають набір об'єктних файлів, згрупованих у єдиний файл і проіндексованих. Коли команда компонування виявляє деяку бібліотеку в списку об'єктних файлів для компонування, вона перевіряє, чи показують вже скомпоновані об'єктні файли виклики для функцій, визначених в одному з файлів бібліотек. Якщо такі функції знайдені, відповідні виклики зв'язуються з кодом об'єктного файлу з бібліотеки.

Бібліотеки зазвичай визначаються через аргументи виду -llibrary-name. Зокрема, -lg ++ означає бібліотеку стандартних функцій C ++, а -lm визначає бібліотеку різних математичних функцій (sin, cos, arctan, sqrt, і т.д.). Бібліотеки повинні бути перераховані після вихідних або об'єктних файлів, що містять виклики до відповідних функцій.

Серед безлічі опцій компіляції і компоновки найбільш часто вживаються наступні:

-c

Тільки компіляція. З вихідних файлів програми створюються об'єктні файли в вигляді name.o. Компонування не проводиться.

-Dname = value

Визначити ім'я name в компільованої програмі, як значення value. Ефект такий же, як наявність рядки #define name value на початку програми. Частина `= value 'може бути опущена, в цьому випадку значення за замовчуванням дорівнює 1.

-o file-name

Використовувати file-name як ім'я для створюваного gcc файлу (зазвичай це виконуваний файл).

-llibrary-name

Створити за допомогою зазначену бібліотеку.

-g

Помістити в об'єктний або виконуваний файл зневадження для відладчика gdb. Опція повинна бути вказана і для компіляції, і для компонування.

-MM

Вивести заголовки (але не стандартні заголовки), що використовуються в кожному вихідному файлі, у вигляді, придатному для утиліти make. Не створювати об'єктні або виконувані файли.

-pg

Помістити в об'єктний або виконуваний файл інструкції профілювання для генерації інформації, використовуваної утилітою gprof. Опція повинна бути вказана і для компіляції, і для компонування. Профілювання - це процес вимірювання тривалості виконання окремих ділянок Вашої програми. Коли Ви вказуєте -pg, отримана виконується програма при запуску генерує файл статистики. Програма gprof на основі цього файлу створює розшифровку, що вказує час, витрачений на виконання кожної функції.

-Wall

Висновок повідомлень про всіх попередженнях або проблеми, які виникають під час трансляції програми.

-O1

Оптимізація рівня 1. Оптимізована трансляції вимагає трохи більше часу і трохи більше пам'яті для великих функцій. Без вказівки опцій `-O 'мета компілятора состoіт в тому, щоб зменшити вартість трансляції та видати очікувані результати при налагодженні. Оператори незалежні: якщо ви зупиняєте програму на контрольній точці між операторами, ви можете призначити нового значення будь-якої змінної або поставити лічильник команд на будь-який інший оператор в функції і отримати точно такі результати, які ви очікували з початкового тексту. Із зазначенням `-O 'компілятор пробує зменшити розмір коду та час виконання.

-O2

Оптимізація рівня 2. GNU CC виконує майже всі підтримувані оптимізації, які не включають зменшення часу виконання за рахунок збільшення довжини коду. Компілятор не виконує розкрутку циклів або підстановку функцій, коли ви вказуєте `-O2 '. За порівняння з `-O 'ця опція збільшує як час компіляції, так і ефективність згенерованого коду.

-O3

Оптимізація рівня 3. `-O3 'включає всі оптимізації, які визначаються` -O2', а також включає опцію `inline-functions '.

-O0

Чи не оптимізувати. Якщо ви використовуєте численні `-O 'опції з номерами або без номерів рівня, дійсної є остання така опція.

Alex Otwagin 2002-12-16

Спонсори:

Хостинг:



Новости