Soname: различия между версиями

Материал из ALT Linux Wiki
Строка 4: Строка 4:
{{MovedFromFreesourceInfo|AltLinux/Sisyphus/devel/soname}}
{{MovedFromFreesourceInfo|AltLinux/Sisyphus/devel/soname}}


=== Что делать, если библиотека в апстриме без soname? ===
=== Создание библиотеки с soname ===


<pre>
Правильная библиотека имеет название типа libfoo.so.x.y.z, а на неё сделаны ссылки libfoo.so.x и libfoo.so. Причём сама библиотека и ссылка libfoo.so.x пакуется в пакет libfoo, а libfoo.so, нужная обычно только для линовки, вместе с заголовками для компиляции пакуется в в libfoo-devel.
23.05.06, Yury Aliaev<mutab0r@rambler.ru> написал(а):
> У меня назрел следующий вопрос: имеется некая либа (назовём её, к
> примеру, libfoo, хотя это на самом деле
> [http://sourceforge.net/projects/liborigin) http://sourceforge.net/projects/liborigin)]. Сдалана она, что называется,
> на коленке: Makefile руками писан, libtool и близко не стоял...
> Соответственно, после компиляции получаем libfoo.so. И всё. Признаюсь,
> что info libtool я не читал, и не знаю, как всё на самом деле должно
> происходить, но обычно библиотека имеет обозначение типа
> libfoo.so.x.y.z, а на неё сделаны ссылки libfoo.so.x и libfoo.so. Причём
> сама либа пакуется в libfoo, а ссылки (вместе с заголовками для
> компиляции) -- в libfoo-devel.


Да, так и есть. Но это в том случае, если у библиотеки предусмотрен т.н. soname.
Обычно версия библиотеки задаётся в LDFLAGS при линковке библиотеки примерно так:
Если его нет, то необходимо апстриму протолкнуть патч, его включающий,
сэкономите кучу нервов на поддержке этой библиотеки, если она
когда-нибудь станет широко использоваться.
 
Обычно патч заключается в добавлении вот примерно такого в LDFLAGS при
линковке библиотеки
-Wl,-soname,libfoo.so.1
-Wl,-soname,libfoo.so.1


Строка 31: Строка 14:
Сам .so файл библиотеки при этом должен иметь имя типа libfoo.so.1.0.0
Сам .so файл библиотеки при этом должен иметь имя типа libfoo.so.1.0.0
или даже libfoo.so.1.0
или даже libfoo.so.1.0
Обратите внимание что первая цифра после .so совпадает с  цифрой после soname.
Обратите внимание, что первая цифра после .so совпадает с  цифрой после soname.


Таким образом, библиотека libfoo.so.1.0 имеет soname libfoo.so.1
Таким образом, библиотека libfoo.so.1.0 имеет soname libfoo.so.1
Строка 46: Строка 29:
менять soname и первую цифру. Это позволит в переходный период
менять soname и первую цифру. Это позволит в переходный период
сохранить работоспособность старых приложений.
сохранить работоспособность старых приложений.
> Я хочу узнать, как правильно поступить в моём случае: просто запаковать
> libfoo.so в пакет libfoo, а заголовки -- в libfoo-devel, или же самому
> переименовать libfoo.so в libfoo.so.x.y.z и засунуть в пакет libfoo (но
> тогда из каких соображений взять x, y и z?) и создать ссылки libfoo.so.x
> и libfoo.so, которые засунуть в пакет libfoo-devel?
Переименование бессмысленно по причинам, приведенным выше (soname).
Две библиотеки с одинаковым soname в одной системе не уживутся.


Более подробно сказано здесь:
Более подробно сказано здесь:
[http://www.gnu.org/software/libtool/manual.html#Versioning http://www.gnu.org/software/libtool/manual.html#Versioning]
[http://www.gnu.org/software/libtool/manual.html#Versioning http://www.gnu.org/software/libtool/manual.html#Versioning]
</pre>

Версия от 11:40, 31 декабря 2009

42px-Wikitext-ru.svg.png
Эту статью следует викифицировать.
Stub.png
Данная страница находится в разработке.
Эта страница ещё не закончена. Информация, представленная здесь, может оказаться неполной или неверной.
Freesource-logo.png Blue Glass Arrow.svg MediaWiki logo.png
Эта страница была перемещена с freesource.info.
Эта страница наверняка требует чистки и улучшения — смело правьте разметку и ссылки.
Просьба по окончанию убрать этот шаблон со страницы.


Создание библиотеки с soname

Правильная библиотека имеет название типа libfoo.so.x.y.z, а на неё сделаны ссылки libfoo.so.x и libfoo.so. Причём сама библиотека и ссылка libfoo.so.x пакуется в пакет libfoo, а libfoo.so, нужная обычно только для линовки, вместе с заголовками для компиляции пакуется в в libfoo-devel.

Обычно версия библиотеки задаётся в LDFLAGS при линковке библиотеки примерно так: -Wl,-soname,libfoo.so.1

Где libfoo.so.1 - это т.н. soname библиотеки. Сам .so файл библиотеки при этом должен иметь имя типа libfoo.so.1.0.0 или даже libfoo.so.1.0 Обратите внимание, что первая цифра после .so совпадает с цифрой после soname.

Таким образом, библиотека libfoo.so.1.0 имеет soname libfoo.so.1 Также надо создать ссылки libfoo.so.1 -> libfoo.so.1.0 и libfoo.so -> libfoo.so.1.0

Теперь о дальнейшем развитии библиотеки.

Если в новом релизе добавилась в библиотеку какая-то функциональность, не меняя старой (обратная совместимость по API), то надо прибавлять вторую или третью цифру.

А если изменения в новой библиотеке затронули старые API/ABI, то надо менять soname и первую цифру. Это позволит в переходный период сохранить работоспособность старых приложений.

Более подробно сказано здесь: http://www.gnu.org/software/libtool/manual.html#Versioning