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

Теперь, чтобы проверить наличие символьных ссылок для soname, выведем список файлов из каталога /usr/lib, в именах которых содержится название libdemo:

# cd /usr/lib

# ls — l libdemo* | awk '{print $1, $$9, $10, $11}'

lrwxrwxrwx libdemo.so.1 — > libdemo.so.1.0.1

— rwxr-xr-x libdemo.so.1.0.1

lrwxrwxrwx libdemo.so.2 — > libdemo.so.2.0.0

— rwxr-xr-x libdemo.so.2.0.0

Нам все еще нужно создать символьную ссылку для компоновочного имени. Воспользуемся для этого следующей командой:

# ln — s libdemo.so.2 libdemo.so

Однако, если установить новую новую минорную версию нашей библиотеки, 2.x, то программа ldconfig обновит и компоновочное имя, поскольку оно указывает на последнюю версию soname. В этом можно убедиться на следующем примере:

# mv libdemo.so.2.0.1 /usr/lib

# ldconfig — v | grep libdemo

libdemo.so.1 — > libdemo.so.1.0.1

libdemo.so.2 — > libdemo.so.2.0.1 (changed)

При сборке и использовании приватной библиотеки (такой, которая не устанавливается в стандартные каталоги) программа ldconfig может помочь создать символьную ссылку на имя soname — достаточно указать параметр — n. Это заставит ldconfig обрабатывать только каталоги, заданные в командной строке, и предотвратит обновление файла с кэшем. В следующем примере мы воспользуемся программой ldconfig для обработки библиотек в текущем каталоге:

$ gcc — g — c — fPIC — Wall mod1.c mod2.c mod3.c

$ gcc — g — shared — Wl, — soname,libdemo.so.1 — o libdemo.so.1.0.1 \

mod1.o mod2.o mod3.o

$ /sbin/ldconfig — nv.

.:

libdemo.so.1 — > libdemo.so.1.0.1

$ ls — l libdemo.so* | awk '{print $1, $9, $10, $11}'

lrwxrwxrwx libdemo.so.1 — > libdemo.so.1.0.1

— rwxr-xr-x libdemo.so.1.0.1

При вызове программы ldconfig мы указали полный путь к ней, так как наша учетная запись не имеет повышенных привилегий и в ее переменной среды PATH не содержится каталог /sbin.

41.8. Совместимые и несовместимые библиотеки

Со временем в код разделяемой библиотеки приходится вносить изменения. Результатом этого будет новая версия библиотеки, которая либо совместима с предыдущими (то есть нужно поменять только минорный идентификатор в ее реальном имени), либо нет (в таком случае устанавливается новый мажорный номер).

Вносимые изменения совместимы с имеющейся версией библиотеки, если выполняются все условия, перечисленные ниже.

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

• Из публичного программного интерфейса библиотеки не была удалена ни одна функция или переменная. Хотя добавление новых публичных функций и переменных не нарушает совместимость.

• Структуры, которые выделяются внутри всех функций и возвращаются ими, остаются неизменными. Аналогично не меняются структуры библиотеки, доступные для применения извне. Исключение из правила состоит в том, что в ряде обстоятельств в конец структуры могут быть добавлены новые элементы, хотя и это может оказаться источником непредвиденного поведения, если, например, вызывающая программа попытается выделить массив данного типа. Чтобы обойти описанные ограничения, разработчики библиотек иногда делают размер экспортируемых структур большим, чем того требует текущая версия библиотеки, добавляя несколько запасных полей «для будущего использования».

Если ни одно из этих условий не нарушается, новое имя библиотеки может быть сформировано путем инкрементации минорной версии. В противном случае необходимо создавать новый мажорный идентификатор.

41.9. Обновления разделяемых библиотек

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

$ su

Password:

# gcc — g — c — fPIC — Wall mod1.c mod2.c mod3.c

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

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

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

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

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

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

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

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

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