Читаем Linux API. Исчерпывающее руководство полностью

$ gcc — g — shared — Wl, — Bsymbolic — o libfoo.so foo.o

$ gcc — g — o prog prog.c libfoo.so

$ LD_LIBRARY_PATH=. /prog

foo-xyz

Параметр компоновщика — Bsymbolic делает так, что ссылки на глобальный символ внутри разделяемой библиотеки в первую очередь должны привязываться к определению из этой библиотеки (если таковое существует). Стоит отметить: вне зависимости от данного параметра вызов xyz() из главной программы всегда приводит к запуску той версии xyz(), которая в ней определена.

41.13. Использование статической библиотеки вместо динамической

Почти во всех случаях разделяемые библиотеки являются наиболее предпочтительным выбором, однако иногда бывают ситуации, в которых более подходящей оказывается статическая библиотека. В частности, преимуществом статических библиотек может быть тот факт, что они позволяют скомпоновать в приложение весь код, необходимый ей для работы. Статическая компоновка, к примеру, подходит для пользователей, которые не могут или не хотят устанавливать в своей системе разделяемые библиотеки, или в случаях, когда программа должна выполняться в среде, где разделяемые библиотеки недоступны (например, в «тюрьме» chroot). Кроме того, даже обновление разделяемой библиотеки до совместимой версии может привести к ошибкам, вызывающим сбой приложения. Компонуя программу статически, мы защищаем ее от внешних изменений и гарантируем, что она содержит весь код, необходимый для ее выполнения (за счет увеличения ее размера и, как следствие, повышенного потребления дискового пространства и памяти).

Если в распоряжении компоновщика имеются оба типа библиотеки с тем же именем — статическая и разделяемая (например, когда во время компоновки указаны параметры — Lsomedir — ldemo, и при этом существуют файлы libdemo.so и libdemo.a), то он по умолчанию выбирает последнюю. Чтобы заставить его использовать статическую версию библиотеки, можно выполнить одно из следующих действий:

• указать путь к статической библиотеке (включая расширение. a) в командной строке gcc;

• указать для gcc параметр — static;

• задействовать параметры gcc — Wl, — Bstatic и — Wl, — Bdynamic, чтобы явно переключить компоновщик в режим использования статических библиотек. При этом можно применять параметры — l в командной строке gcc. Компоновщик обработает их в том порядке, в котором они были указаны.

41.14. Резюме

Объектная библиотека объединяет в себе скомпилированные объектные модули, которые могут быть использованы программами, скомпонованными с этой библиотекой. Как и другие реализации UNIX, Linux предоставляет два вида объектных библиотек: статические (не имевшие альтернативы в ранних UNIX-системах) и более современные разделяемые.

Разделяемые библиотеки имеют несколько преимуществ перед статическими, поэтому преобладают в современных реализациях UNIX. Данные преимущества по большей части следуют из того факта, что в итоговый исполняемый файл не записываются объектные модули библиотеки, с которой она скомпонована. Вместо этого (статический) компоновщик просто добавляет в файл программы информацию о разделяемых библиотеках, необходимые ей для работы. При запуске файла динамический компоновщик использует данную информацию для загрузки соответствующих библиотек. На этапе выполнения в память загружается только одна копия разделяемой библиотеки, которая может применяться разными программами. Как следствие фактов, описанных выше, разделяемые библиотеки уменьшают объем дискового пространства и памяти, необходимые системе.

Имя soname предоставляет уровень абстракции для разрешения ссылок на разделяемые библиотеки во время выполнения. Если оно присутствует, то записывается статическим компоновщиком в итоговый исполняемый файл вместо реального имени библиотеки. Существует также система версионирования, когда реальное имя библиотеки имеет вид имя_библиотеки. so.мажорный_идентификатор. минорный_идентификатор. Это позволяет создавать программы, которые автоматически загружают последнюю минорную версию разделяемой библиотеки (без необходимости проводить повторную компоновку); благодаря этому также можно генерировать мажорные версии библиотеки, несовместимые с предыдущими.

Для нахождения разделяемой библиотеки на этапе выполнения динамический компоновщик следует стандартному набору правил, подразумевающему поиск по списку каталогов (таких как /lib и /usr/lib), в которых эта библиотека может быть установлена.

Дополнительная информация

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных