Книга: Разработка приложений в среде Linux. Второе издание
8.4. Сборка совместно используемых библиотек
8.4. Сборка совместно используемых библиотек
Если вы разобрались с концепцией имен soname, все остальное просто. Достаточно следовать нескольким несложным правилам, которые перечислены ниже.
• Собирайте свой исходный код с указанием флага -fPIC
для gcc
. В результате сгенерируется независимый от места расположения код, который можно компоновать и загружать по любому адресу[13].
• Не используйте опцию компилятора -fomit-frame-pointer
. Библиотеки по-прежнему будут работать, но отладчики станут бесполезными. Если в библиотеке будет найдена ошибка, пользователь не сможет осуществить обратную трассировку ошибки в коде.
• При компоновке библиотеки используйте gcc
вместо ld
. Компилятору С известно, как вызывать загрузчик для правильной компоновки, к тому же нет никакой гарантии, что интерфейс для ld
останется неизменным.
• При компоновке библиотеки не забывайте предоставлять имя soname. Для этого используется специальная опция компилятора -Wl
. Для сборки своей библиотеки используйте команду
gcc -shared -Wl, -soname, soname -о libname filelist liblist
где soname
— имя soname, libname
— имя библиотеки, включая полное имя версии, например, libc.so.5.3.12
, filelist
— список объектных файлов, которые нужно разместить в библиотеке, a liblist
— список других библиотек, предоставляющих символы, к которым будет получать доступ эта библиотека. Последний элемент очень легко пропустить, поскольку без него библиотека будет работать в системе, в которой она создана, но может не работать в других ситуациях. Практически для любой библиотеки в список следует включать библиотеку С, поместив -lс
в конце списка.
Чтобы создать файл libfоо.so.1.0.1
с soname-именем libfоо.so.1
из объектных файлов fоо.о
и bar.о
, используйте следующую команду:
gcc -shared -Wl,-soname,libfoo.so.1 -о libfoo.so.1.0.1 foo.o bar.о -lc
• He разбивайте на полосы библиотеку, если только не сталкиваетесь с окружением, где пространство ограничено. Разбитые на полосы библиотеки будут функционировать, но будут иметь такие же основные недостатки, что и библиотеки, собранные из объектных файлов, скомпилированных с -fomit-frame-pointer
.
- Глава 8 Создание и использование библиотек
- 1.4.4 Сборка мусора
- Просмотр библиотек документов
- Создание библиотек
- Создание библиотек документов
- Создание библиотек форм
- Создание библиотек рисунков
- Создание папки в библиотеке
- Настройка библиотеки
- Использование параметров библиотек документов
- Обеспечение безопасности библиотеки
- Удаление библиотеки