Несколько месяцев назад я построил программное обеспечение C, которое использовало libxml2 как общую библиотеку на debian. Я создал файл .deb для установки программного обеспечения, и пользователи Ubuntu могли запустить его.
Сегодня последняя версия Ubuntu имеет большую версию libxml2. Итак, теперь программное обеспечение не запускается, оно запрашивает предыдущую версию libxml2 и единственный способ заставить ее работать, создавая программное обеспечение при подключении к новой версии libxml2.
Поэтому мой вопрос: возможно ли связать с общей библиотекой, не требуя конкретной версии (рискуя, что программное обеспечение не может работать с какой-либо версией)?
Если это не так, то каково реальное преимущество связывания с общей библиотекой, если вы не можете развернуть свое программное обеспечение в любом дистрибутиве Linux?
Спасибо за помощь.
С наилучшими пожеланиями, Винсент.
В большинстве разделяемых библиотек будет встроенный SONAME
. Этот SONAME
используется для указания совместимости двоичных SONAME
. Например, libxml2.so.2.7.8 имеет встроенный SONAME
libxml2.so.2:
readelf -Wa libxml2.so.2.7.8 | grep SONAME 0x000000000000000e (SONAME) Library soname: [libxml2.so.2]
Если выйдет libxml2.so.2.7.9, он, скорее всего, будет бинарным, совместимым с v2.7.8, и все равно будет иметь SONAME
libxml2.so.2, и ваше приложение будет работать нормально. Только когда было внесено изменение, которое нарушило бинарную совместимость, SONAME
будет увеличиваться, нарушая ваше приложение.
Если вы хотите создать пакет, который будет автоматически работать во всех дистрибутивах, один из них – доставить вашу собственную версию libxml2, а затем изменить LD_LIBRARY_PATH
таким образом, чтобы ваша версия автоматически загружалась.