АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Компилятор С: gcc

Читайте также:
  1. Ключи компиляции (директивы компилятора)
  2. Синтаксис и семантика. Структура компилятора

Между операционной системой UNIX и языком программирования С существует тесная взаимосвязь. Общеизвестно, что язык С с самого начала предназначался для использования в качестве инструмента разработки операционной системы UNIX. И действительно, при создании программного кода операционной системы UNIX в основ­ном применялся язык С. То же самое можно сказать относительно Linux. Большинство вариантов Linux включают GNU-версию компилятора С, gcc. Язык программирования С достаточно сложен, включает множество различных средств. В этом разделе кратко описаны основные компоненты языка программирования С и способы их использова­ния при создании некоторых полезных программ. На примере последних будут рас­смотрены различные методы компиляции программ, написанных на языке С.

Для вызова компилятора GNU С в системе Linux необходимо воспользоваться ко­мандой gcc. Команда gcc, в свою очередь, вызывает четыре других компонента. Первый из них именуется препроцессором. В программах на языке С содержатся специальные команды препроцессора, изменяющие программный код перед его отсылкой компиля­тору. В качестве второго компонента выступает сам компилятор. Он обрабатывает про­граммный код и создает версию кода сборки для программы. Третий компонент — ассемблер. На основании версии кода сборки ассемблер генерирует версию объектного кода. В качестве четвертого компонента выступает редактор связей, который использует объектный код для создания исполняемой программы. Полученный в результате функ­ционирования компилятора файл по умолчанию именуется a.out. Однако этому файлу можно присвоить и другое имя. В этом случае потребуется воспользоваться опцией -о, в качестве параметра которой следует указать название файла. В результате вместо стандартного имени a.out будет использовано новое имя. Перечень параметров команды gcc приведен в табл. 1. В следующем примере программа gccиспользуется для компиляции программы greet.c. Программист назвал исполняемый файл «greet». Запуск исполняемого файла осуществляется с помощью командной строки Linux точно так же, как и запуск любой другой команды.

$ gcc greet, с -о greet

$ greet

Hello, how are you

При работе с программами, состоящими из нескольких отдельных файлов, необхо­димо учитывать разницу между компилятором С и редактором связей. Компилятор С предназначен для создания объектного кода, а назначением редактора связей является создание исполняемой программы, использующей файлы с объектными кодами. Ком­пилятор С компилирует отдельно каждый файл, содержащий исходный код, и для ка­ждого из них создает отдельный файл с объектным кодом. Созданные файлы, вклю­чающие объектный код, имеют расширение.о, а не.с. С помощью одной команды gcc можно скомпилировать и скомпоновать программу, состоящую из нескольких фай­лов. Для этого нужно просто перечислить названия всех файлов, содержащих исходный код, сославшись на них как на параметры командной строки. В следующем примере программист компилирует программу bookrecs путем вызова команды gcc с указанием файлов, содержащих исходный код. С помощью опции -о указывается, что исполняемая программа именуется bookrecs.

$ gcc main.с io.c -о bookrecs

Утилиту gcc можно использовать только для компоновки, если в командной строке будут перечислены лишь файлы объектного кода. Файлы объектного кода имеют расши­рение.о. В следующем примере программист выполняет компоновку программы. В дан­ном случае компиляция не выполняется. Конечно, в этом случае подразумевается, что файлы объектного кода были созданы заранее.

Таблица.1. Утилита gcc: компилятор языка С
Команда Описание

gcc Утилита gcc создает исполняемую программу с помощью препроцессора, ком

пилятора, ассемблера и редактора связей. Препроцессор обрабатывает макроко­манды, находящиеся в файле исходного кода. Подобные команды выполняют простую подстановку текста. Компилятор компилирует файл исходного кода, соз­давая код сборки. Ассемблер компилирует файлы кода сборки, создавая файлы объектного кода. Редактор связей выполняет компоновку файлов объектного ко­да, создавая исполняемый файл. В качестве возможных параметров утилиты gcc применяются исходный код, объектный код, а также файлы кода сборки. Наравне с этим используется множество опций. Утилита gcc распознает файлы по их расширениям:

.с — файлы исходного кода С.о — файлы объектного кода.s — файлы кода на языке ассемблера.С — файлы C++ .срр — файлы C++

Опция Назначение

-S Выводит исключительно код на языке ассемблера. Версии кода на языке ас-

семблера для скомпилированных файлов имеют расширение.s. В примере ге­нерируется файл greets

-Р Выводит результаты работы препроцессора

-с Создает исключительно файл объектного кода. Версии скомпилированных фай-

лов объектного кода имеют расширение.о

-g Осуществляет подготовку скомпилированной программы для использования со-

вместно с символическим отладчиком

имяфайла Задает имя исполняемого файла, имя_файла. По умолчанию используется a.out
Выполняет оптимизированную компиляцию

-1 имя_файла Обеспечивает применение для компоновки программы системной библиотеки с указанным именем файла. Имя файла содержит префикс lib и расширение.а. В командной строке gcc эта опция не указывается. Опции -1 должны всегда располагаться после исходного кода и имен файлов объектного кода в командной строке

- IdirЗадает каталоги, в которых производится поиск файлов для включения, таких

как файлы заголовков (.h)

- LdirЗадает каталоги, в которых производится поиск библиотек

При разработке и отладке программы приходится вносить изменения в файлы ис­ходного кода, компилировать их, а затем повторно запускать на выполнение. При ком­пиляции очень большой программы, состоящей из множества файлов программного кода, полная повторная компиляция всех файлов является неэффективной. Ведь изме­нения могут быть внесены только в некоторые из них. Остальные же файлы достаточно просто скомпоновать, а не выполнять их полную компиляцию. В этом случае может быть применена утилита gcc. Просто поместите в одной командной строке файлы исходного и объектного кода. Поскольку файлы исходного кода имеют расширение.с, а файлы объектного кода — расширение.о, утилита gcc скомпилирует указанные в командной строке файлы исходного, а файлы объектного кода будут предназначены исключительно для использования редактором связей. В результате компиляции только измененных файлов обеспечивается определенное преимущество. Если изменения были внесены в файл main.с, а файл io.c остался прежним, то компилировать его не следует. Для этого в командной строке gcc надо указать файл исходного кода, main.с, и файл объектного кода, io.o. В следующем примере компилируется лишь файл main.с, а файл io.o компилироваться не будет.

$ gcc main.с io.o -о bookrecs


1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.003 сек.)