Основы программирования в Linux | страница 24



>$ ar crv libfоо.a bill.о fred.о

>а - bill.о а - fred.о

7. Библиотека создана, и в нее добавлены два объектных файла. Для того чтобы успешно применять библиотеку в некоторых системах, в особенности в производных от Berkeley UNIX, требуется создать для библиотеки индекс содержимого архива или список вложенных в библиотеку функций и переменных (table of contents). Сделайте это с помощью команды >ranlib. В ОС Linux при использовании программных средств разработки GNU этот шаг не является необходимым (но и не приносит вреда).

>$ ranlib libfoo.a

Теперь ваша библиотека готова к использованию. Вы можете добавить следующий список файлов, которые должен обработать компилятор для создания вашей программы:

>$ gcc -о program program.о libfоо.а

>$ ./program

>bill: we passed Hello world

Можно было бы применить для доступа к библиотеке флаг >-l, но т.к. она хранится не в одном из стандартных каталогов, вы должны сообщить компилятору место поиска с помощью флага >-L следующим образом:

>$ gcc -о program .program.о -L. -lfoo

Опция >-L заставляет компилятор искать библиотеки в текущем каталоге (.). Опция >-lfoo сообщает компилятору, что нужно использовать библиотеку с именем libfoo.a (или совместно используемую библиотеку libfoo.so, если она есть). Для того чтобы посмотреть, какие функции включены в объектный файл, библиотеку или исполняемую программу, можно применить команду >nm. Если вы взглянете на файлы program и libfoo.a, то увидите, что библиотека содержит обе функции: >fred и >bill, а файл program — только функцию >bill. Когда создается программа, в нее включаются из библиотеки только те функции, которые ей действительно нужны. Вставка заголовочного файла, содержащего объявления всех функций библиотеки, не вызывает включения в конечную программу целиком всей библиотеки.

Если вы знакомы с разработкой программ в ОС Windows, то поймете, что в ОС UNIX существует ряд прямых аналогий, перечисленных в табл. 1.1.


Таблица 1.1

ЭлементUNIXWindows
Объектный модульfunc.oFUNC.OBJ
Статическая библиотекаlib.aLIB.LIB
ПрограммаprogramPROGRAM.EXE
Совместно используемые библиотеки

У статических библиотек один недостаток — когда вы запускаете много приложений одновременно и все они используют функции из одной библиотеки, в результате образуется множество копий одних и тех же функций в памяти и множество реальных копий функций в самих файлах программ. Это может привести к потреблению большого объема полезной памяти и дискового пространства.