Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lection11_компиляторы.doc
Скачиваний:
3
Добавлен:
01.03.2025
Размер:
234.5 Кб
Скачать

Компиляторы, библиотеки и инструментальные средства программирования

Приложение — это исполняемая программа, созданная программистом с помощью одного из многочисленных языков программирования. В Linux доступно несколько утилит, с помощью которых программист может контролировать разработку приложе­ния. Важнейшей среди них является утилита gcc, используемая для запуска компиля­тора C/C++ и создания исполняемой версии программы. Большинство приложений Linux создаются на языках программирования С или C++.

Разработка приложений часто бывает связана с интенсивным использованием биб­лиотек. Можно создавать библиотеки либо выбрать одну из многих специализирован­ных. Разрешается использовать такие библиотеки, как X Window для программирования вывода на дисплей, либо библиотеку gdbm, с помощью которой обеспечивается доступ к файлам баз данных. Современные библиотеки являются весьма гибкими. В частности, уже стало возможным совместное использование и динамическая загрузка библиотек.

Другие утилиты облегчают процесс разработки приложений. Символические отлад­чики gdb позволяют локализовать ошибки, возникающие во время запуска приложения. Утилиты indent и cproto облегчают подготовку исходного кода программы, a Autoconf и RPM обеспечивают создание пакетов программ с целью их дальнейшего распростра­нения. Для Linux были разработаны компиляторы всех основных языков программи­рования, таких как ЛИСП, Ада, Фортран, Бейсик и Модула-2.

Получение информации: info

Несмотря на то что для всех компиляторов и инструментальных средств програм­мирования разработаны оперативные руководства, справочная система GNU предос­тавляет более подробную справку. В каталоге /usr/info находятся файлы, содержащие подробные описания и примеры для различных инструментов GNU. Они могут вы­ступать в роли компактного интерактивного справочника. В этом каталоге можно найти справочные документы для компилятора gcc, библиотек C/C++ и утилиты Autoconf. Для других приложений могут существовать свои локальные каталоги, содержащие соб­ственные информационные файлы. Так, в каталоге /usr/TeX/info находятся справочные файлы, описывающие использование редактора LaTeX. Чтобы вызвать главное меню справочной системы, необходимо воспользоваться командой info.

$ info

Для осуществления перехода между страницами меню применяется клавиша [Про­бел]. После того как найдена интересующая вас тема, нажмите клавишу [m]. В результате этого в нижней части экрана появится строка, в которой вводится название соответ­ствующего пункта меню. После нажатия клавиши [Enter] запрашиваемый документ ото­бражается на экране. С помощью клавиши [b] осуществляется возврат к началу доку­мента, а клавиша [U] обеспечивает переход к предыдущему меню. После ввода команды info info отображается информация по использованию справочной системы info.

Компилятор С: 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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]