Читаем 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

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

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

C++ Primer Plus
C++ Primer Plus

C++ Primer Plus is a carefully crafted, complete tutorial on one of the most significant and widely used programming languages today. An accessible and easy-to-use self-study guide, this book is appropriate for both serious students of programming as well as developers already proficient in other languages.The sixth edition of C++ Primer Plus has been updated and expanded to cover the latest developments in C++, including a detailed look at the new C++11 standard.Author and educator Stephen Prata has created an introduction to C++ that is instructive, clear, and insightful. Fundamental programming concepts are explained along with details of the C++ language. Many short, practical examples illustrate just one or two concepts at a time, encouraging readers to master new topics by immediately putting them to use.Review questions and programming exercises at the end of each chapter help readers zero in on the most critical information and digest the most difficult concepts.In C++ Primer Plus, you'll find depth, breadth, and a variety of teaching techniques and tools to enhance your learning:• A new detailed chapter on the changes and additional capabilities introduced in the C++11 standard• Complete, integrated discussion of both basic C language and additional C++ features• Clear guidance about when and why to use a feature• Hands-on learning with concise and simple examples that develop your understanding a concept or two at a time• Hundreds of practical sample programs• Review questions and programming exercises at the end of each chapter to test your understanding• Coverage of generic C++ gives you the greatest possible flexibility• Teaches the ISO standard, including discussions of templates, the Standard Template Library, the string class, exceptions, RTTI, and namespaces

Стивен Прата

Программирование, программы, базы данных
1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

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

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

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

В этом полном руководстве по C# 4.0 - языку программирования, разработанному специально для среды .NET, - детально рассмотрены все основные средства языка: типы данных, операторы, управляющие операторы, классы, интерфейсы, методы, делегаты, индексаторы, события, указатели, обобщения, коллекции, основные библиотеки классов, средства многопоточного программирования и директивы препроцессора. Подробно описаны новые возможности C#, в том числе PLINQ, библиотека TPL, динамический тип данных, а также именованные и необязательные аргументы. Это справочное пособие снабжено массой полезных советов авторитетного автора и сотнями примеров программ с комментариями, благодаря которым они становятся понятными любому читателю независимо от уровня его подготовки. Книга рассчитана на широкий круг читателей, интересующихся программированием на C#.Введите сюда краткую аннотацию

Герберт Шилдт

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