
- •Компиляторы, библиотеки и инструментальные средства программирования
- •Получение информации: info
- •Двоичные форматы elf и a.Out
- •Другие компиляторы: Паскаль, Ада, Лисп и Фортран
- •Создание и использование библиотек: статических, совместно используемых и динамических
- •Символический отладчик gbd
- •Программа xxgdb
- •Инструментальные средства программирования
- •Инструментальные средства разработки
- •Утилита make
- •Система контроля версий: rcs
- •Система параллельных версий: cvs
- •Интерактивные справочники по приложениям: оперативные руководства
- •Файлы документации утилиты man
Компиляторы, библиотеки и инструментальные средства программирования
Приложение — это исполняемая программа, созданная программистом с помощью одного из многочисленных языков программирования. В 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