Троан Эрик В.
Шрифт:
Приложения, которые компонуются с совместно используемой библиотекой, не компонуются непосредственно, например, с
В результате упрощается модернизация совместно используемых библиотек. Для обновления версии 2.3.2 до 2.3.3 потребуется всего лишь скопировать новую версию
Не компонуйте программы со специфическими версиями библиотеки, если на то нет веских причин. Всегда используйте стандартную опцию
Итак, для компоновки с библиотекой С компоновщик находит
8.3.2. Несовместимые библиотеки
Если новая версия библиотеки не должна быть совместимой с предшествующими ее версиями, ей потребуется присвоить другое имя soname. Например, для выпуска новой версии библиотеки С, не совместимой со старой версией, разработчики использовали soname
8.3.3. Разработка совместимых библиотек
При разработке собственных библиотек необходимо знать факторы, делающие библиотеку несовместимой. Существуют три основных причины несовместимости.
1. Изменение или удаление интерфейсов экспортированных функций.
2. Изменение экспортированных элементов данных, исключая добавление необязательных элементов в конец структур, размещенных внутри библиотеки.
3. Изменение поведения функций, выходящее за пределы первоначальной спецификации.
Для поддержания совместимости версий библиотеки можно предпринимать следующие действия.
• Добавлять новые функции под другими именами, а не изменять определения или интерфейсы существующих функций.
• При изменении определений экспортированных структур элементы следует добавлять только в конец структур и сделать дополнительные элементы необязательными либо заполняемыми самой библиотекой. Не расширяйте структуры, распределяемые за пределами библиотеки. В противном случае приложения не смогут распределить правильный объем памяти. Не расширяйте структуры, используемые в массивах.
8.4. Сборка совместно используемых библиотек
Если вы разобрались с концепцией имен soname, все остальное просто. Достаточно следовать нескольким несложным правилам, которые перечислены ниже.
• Собирайте свой исходный код с указанием флага
• Не используйте опцию компилятора
13
Разница между
• При компоновке библиотеки используйте
• При компоновке библиотеки не забывайте предоставлять имя soname. Для этого используется специальная опция компилятора
где