Как сделать управление версией разделяемой библиотеки в Linux? - PullRequest
8 голосов
/ 26 сентября 2011

Поскольку Windows предоставляет файл ресурсов для версии приложения и DLL.Но как мы можем сделать это в Linux с общей библиотекой.У нас есть общая библиотека, и мы хотели бы добавить информацию о версии.

Ответы [ 3 ]

10 голосов
/ 26 сентября 2011

Короткая версия заключается в том, что вы делаете это через soname библиотеки. Прочитайте главу 3 в http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html, а также главу 3.3 ABI Versioning в http://www.akkadia.org/drepper/dsohowto.pdf

3 голосов
/ 26 сентября 2011

Лучший способ справиться с этим - использовать libtool, который выполняет управление версиями для вас.

По сути, информация о версии не (или в первую очередь не знаю из моей головы) закодирована в самой библиотеке, а точнее в его имени файла.Номера версий обычно указываются в трехточечном формате, причем основной номер увеличивается для каждого разрыва в нисходящей совместимости с ABI, средний - для разрыва в восходящей совместимости с ABI, а второстепенный - для исправлений, которые не меняли ABI.

Как отмечено в qdot, символические ссылки в каталоге lib предоставляют необходимые версии.Существует символическая ссылка без номера версии (libfoo.so) для установленных в настоящее время заголовков разработки, символическая ссылка с основным номером для каждой установленной основной версии (libfoo.so.1) и реальный файл с полным номером версии.Обычно программы связаны с использованием libfoo.so.1 во время выполнения, так что несколько основных версий могут сосуществовать.

3 голосов
/ 26 сентября 2011

Linux использует следующую стратегию - вы (сопровождающий систему) предоставляете символические ссылки из «определенного» файла совместно используемой библиотеки, например:

lrwxrwxrwx 1 root root    16 2011-09-22 14:36 libieee1284.so -> libieee1284.so.3
lrwxrwxrwx 1 root root    20 2011-09-22 14:36 libieee1284.so.3 -> libieee1284.so.3.2.2
-rw-r--r-- 1 root root 46576 2011-07-27 13:08 libieee1284.so.3.2.2

Таким образом, разработчики могут связать либо с -lieee1284 (любая версия ABI), либо с libieee1284.so.3, либо даже с конкретной версией выпуска и патча (3.2.2)

...