Intereting Posts

Связывание с общей библиотекой без версии

Несколько месяцев назад я построил программное обеспечение 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 таким образом, чтобы ваша версия автоматически загружалась.