
- •Компиляторы, библиотеки и инструментальные средства программирования
- •Получение информации: info
- •Двоичные форматы elf и a.Out
- •Другие компиляторы: Паскаль, Ада, Лисп и Фортран
- •Создание и использование библиотек: статических, совместно используемых и динамических
- •Символический отладчик gbd
- •Программа xxgdb
- •Инструментальные средства программирования
- •Инструментальные средства разработки
- •Утилита make
- •Система контроля версий: rcs
- •Система параллельных версий: cvs
- •Интерактивные справочники по приложениям: оперативные руководства
- •Файлы документации утилиты man
Создание и использование библиотек: статических, совместно используемых и динамических
В программах на языке С часто встречаются функции, которые достаточно один раз скомпилировать, а затем можно многократно использовать. Кроме того, существуют функции, которые могут применяться программистом при написании других программ. Обычно такие функции предназначены для выполнения стандартных задач, таких как ввод-вывод данных из базы данных или вывод данных на экран. Можно предварительно откомпилировать подобные функции и поместить их в особый файл объектного кода, именуемый библиотекой. Функции такого библиотечного файла могут объединяться с программой с помощью редактора связей. Это позволяет программисту избежать проблем, связанных с компиляцией названных функций для каждой из разрабатываемых программ.
При разработке приложений различных типов используются специализированные библиотеки, которые находятся в системном каталоге. Например, в названном каталоге можно найти библиотеку libdbm, которая содержит функции dbm. Эти функции обеспечивают доступ к файлам баз данных, и их можно применять в пользовательских программах, выполняя компоновку с данной библиотекой. В математических приложениях используется математическая библиотека, libm, а в приложениях X Window — библиотека Xlib, libXll. Во всех прикладных программах применяются стандартные библиотеки С, libc, которые содержат функции для выполнения таких задач, как управление памятью и организация ввода-вывода (сейчас доступна новая версия библиотеки GNU, libc 2.0). Эти библиотеки находятся в системных каталогах, таких как /usr/lib, и могут применяться любым пользователем системы. Можно создавать и собственные пользовательские библиотеки, которые будут либо применяться в какой-то специальной программе, либо предоставляться в распоряжение других программистов.
Библиотеки могут быть статическими, динамическими или совместно используемыми. Статическая библиотека — это библиотека, код которой включается в программу на этапе компиляции. Коды совместно используемой библиотеки становятся доступными для загрузки при выполнении программы. Программа, работающая с совместно используемыми библиотеками, просто создает список библиотек, необходимых для ее функционирования. Затем, при выполнении программы, эти библиотеки загружаются, и исполняемая программа получает доступ к содержащимся в них функциям. Динамическая библиотека является разновидностью совместно используемой библиотеки. Она также может быть загружена при выполнении программы. Однако она не загружается до тех пор, пока к ней не обратится определенная команда программы. Затем эта библиотека может быть выгружена из памяти, а ее место займет другая библиотека. За счет применения совместно используемых и динамических библиотек можно намного уменьшить размер исполняемой программы. Вместо того чтобы включать библиотеку в состав исполняемой программы, достаточно сослаться на нее.
Большинство существующих библиотек являются совместно используемыми библиотеками. Возможность их применения была обеспечена в результате внедрения формата ELF для двоичных исполняемых файлов, хотя для совместно используемых библиотек (специально обозначенных) может применяться более старый формат, a.out. В настоящее время формат ELF является стандартным для всех двоичных файлов в Linux.
Использование библиотек GNU определяется лицензией LGPL (Library GNU Public License). Условия этой лицензии отличаются от условий стандартной лицензии GNU тем, что программы, разработанные с их использованием, могут поставляться на коммерческой основе. Однако исходный код самих библиотек предоставляется в общее пользование.
Библиотеки, доступные в локальной системе, находятся в каталогах /usr/lib и /lib. Названия их всегда начинаются с префикса lib. За этим префиксом следует название библиотеки и суффикс. Используемый суффикс зависит от типа библиотеки. Для совместно используемых библиотек применяется суффикс .so, за которым следует номер версии этой библиотеки. Для статической библиотеки используется расширение .а. Для совместно используемых библиотек в старом формате a.out применяется расширение .sa.
libимя.so.старший_номер.младший_номер
libимя. а
В качестве параметра имя может применяться любая строка, которая однозначно идентифицирует библиотеку. Можно использовать слово, несколько символов или один символ. В названии совместно используемой математической библиотеки libm.so..5 имя библиотеки состоит из одной буквы m и старшего номера версии 5. Библиотека libm.a является статической математической библиотекой. Библиотека функций X Window называется libXll.so.6. В этом случае сама библиотека X Window однозначно идентифицируется буквами XII и номером версии 6.
Для компоновки библиотек с разработанными программами необходимо использовать компилятор gcc. Так, библиотека libc.so.5 содержит стандартные функции ввода-вывода. При создании исполняемого файла редактор связей автоматически ищет эту библиотеку и связывает ее с программой. Стандартная библиотека ввода-вывода содержит множество функций, которые включают такие операции, как printf. Существуют и другие системные библиотеки, такие как, например, математическая библиотека, которые можно использовать при разработке программ. Хотя связь с библиотекой libc.so.5 создается автоматически, ссылки на многие другие системные библиотеки должны быть установлены непосредственно с помощью командной строки компилятора.
Большинство совместно используемых библиотек находятся в каталогах /usr/lib и /lib. Поиск в этих каталогах производится в первую очередь. Некоторые совместно используемые библиотеки находятся в специальных каталогах. Список этих каталогов приведен в файле конфигурации /etc/ld.conf. Поиск библиотек производится и в этих каталогах. По умолчанию система Linux сначала ищет совместно используемые библиотеки, а затем выполняет поиск статических библиотек. При обновлении одной из совместно используемых библиотек или установке новой библиотеки необходимо выполнить команду ldconfig для переопределения записи этой библиотеки в файле /etc/ld.conf и установления связей с нею (при инсталляции с помощью пакета RPM это обновление производится автоматически).
Для установления связей с файлом библиотеки, находящимся в одном из каталогов поиска, необходимо при вызове компилятора gcc использовать параметр -1. После этого параметра должно следовать уникальное имя библиотеки: lимя. Для указания редактору связей использовать стандартную математическую библиотеку в командной строке компилятора gcc нужно ввести команду -lm. Опция -1 определяет первоочередной поиск файла библиотеки с именем \\bname.so, в данном случае libm.so. При этом устанавливается связь с реально существующим файлом библиотеки. В следующем примере создается программа bookrecs, которая будет связана с математической библиотекой. Обратите внимание на использование параметра -lm.
$ gcc main.с io.c -о bookrecs -lm
В настоящее время доступно множество различных библиотек. Одна из самых популярных библиотек именуется libncurses.a. Эта библиотека содержит процедуры, управляющие перемещением курсора. Для установления связей с ней нужно в командной строке ввести -lncurses. В следующем примере программист вызывает две библиотеки: математическую библиотеку и библиотеку, управляющую движением курсора.
$ gcc main.с io.c -о bookrecs -lm -lncurses
Для ссылки на библиотеку, которая находится в каталоге, не описанном в файле /etc/ld.conf, необходимо указать этот каталог в командной строке, воспользовавшись параметром -Ldir. Этот параметр добавляет введенный каталог к списку тех каталогов, в которых будет производиться поиск библиотек при указании параметра -1. В следующем примере программист устанавливает связь с библиотекой myio.so, расположенной в каталоге mydir. Для совместно используемых библиотек в первую очередь должны быть установлены имена ссылок dl и Id, такие, как libmyio.so и libmyio.so.1 для файла libmyio.so.1.0.
gcc main.с -о bookrecs -Lmydir -lmyio