|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Компилятор С: gcc
Между операционной системой 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 Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.004 сек.) |