Ссылка на символическую ссылку вместо soname - PullRequest
1 голос
/ 30 декабря 2010

У меня есть приложение linux, которое в строке компоновщика ссылается на: libpython2.6.so

Это в конечном итоге приводит к libpython.2.6.so.1.0

/usr/lib/libpython2.6.so -> libpython2.6.so.1
/usr/lib/libpython2.6.so.1 -> libpython2.6.so.1.0

, которое имеетSONAME встроен в него, так что я застрял в нем, связываясь с полностью версионным именем.

 g++ foo.cc /usr/lib/libpython2.6.so
 ldd ./a.out | grep python
        libpython2.6.so.1.0 => /usr/lib/libpython2.6.so.1.0 (0x00007fd36f7ab000)

Это означает, что мое приложение в конечном итоге сломается, если когда-либо будет libpython2.6.so.1.1.Есть ли способ заставить мое приложение использовать общее имя libpython2.6 вместо libpython2.6.so.1.0?

Я использую такой небольшой набор API Python, что я думаю, что я должен быть в безопасностиссылка на более общее название версии библиотеки.

Ответы [ 2 ]

1 голос
/ 30 декабря 2010

Посмотрите на `` 3.1.1. Имена общих библиотек '' в http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html, это может помочь вам понять метод именования библиотеки общего доступа.

Каждая общая библиотека имеет специальный имя называется soname''. The soname has the prefix lib '', имя библиотека, фраза .so'', followed by a period and a version number that is incremented whenever the interface changes (as a special exception, the lowest-level C libraries don't start with lib ''). полностью квалифицированная сонама включает в себя префикс каталога, в котором он находится; на рабочая система полностью квалифицированная soname просто символическая ссылка на `` настоящее имя '' общей библиотеки.

Каждая общая библиотека также имеет `` реальную имя '', которое является именем файла содержащий фактический код библиотеки. Настоящее имя добавляет к сонаме период, младший номер, другой период и номер выпуска. последний период и номер выпуска необязательный. Малый номер и выпуск поддержка конфигурации номера поддержки давая вам знать, что именно версия (и) библиотеки установлены. Обратите внимание, что эти цифры может не совпадать с числами используется для описания библиотеки в документация, хотя это делает все проще.

Кроме того, есть имя, которое компилятор использует при запросе библиотека, (я буду называть это `` компоновщик имя ''), который просто сонама без номера версии.

1 голос
/ 30 декабря 2010

Не беспокойтесь об увеличении SO версии libpython2.6. Это никогда не увеличится; дальнейших выпусков исправлений до версии 2.6 не будет, и даже если бы они были, версия SO не была бы увеличена.

Вам следует побеспокоиться об уходе libpython2.6 в будущих версиях системы (будет заменен на libpython2.7). Пока нет хорошего решения для этого; с помощью PEP 384 вы сможете установить связь с libpython3.so.

...