фонGCC: Определение минимального Shared Library версии
я унаследовал и поддерживать общую библиотеку Linux, которая очень тесно связаны с конкретными аппаратными средствами; назовем это libfoo.so.0.0.0
. Эта библиотека была в течение некоторого времени и «просто сработала». Эта библиотека теперь стала зависимой для нескольких приложений более высокого уровня.
Теперь, к сожалению, новые конструкции оборудования заставили меня создавать символы с более широкими типами, в результате чего получается libfoo.so.0.1.0
. Были только дополнения; никакие удаления или другие изменения API. Оригинальные узкие версии обновленных символов все еще существуют в их первоначальной форме.
Кроме того, у меня есть приложение (скажем, myapp
), которое зависит от libfoo
. Первоначально он был написан для поддержки версии библиотеки 0.0.0
, но теперь она была переработана для поддержки новых API-интерфейсов 0.1.0
.
Для соображений обратной совместимости, я хотел бы иметь возможность построить myapp
для старой или новой библиотеки с помощью флага компиляции. Ядро, в которое будет загружена данная сборка myapp
, всегда будет иметь только одну версию библиотеки, известную во время компиляции.
Вопрос
Весьма вероятно, что libfoo
будет обновляться в будущем.
При создании
myapp
, можно указать версию минимум изlibfoo
компоноваться с на основе флага сборки?Я знаю, что имя библиотеки можно указать непосредственно в CLI сборки. Будет ли это вызвано тем, что
myapp
потребует точно, что версия или более поздние версии lib с той же основной версией все же могут быть связаны с ней (например,libfoo.so.0.2.0
)? Я действительно надеюсь, что вам не придется обновлять каждую зависимую версию приложения каждый раз, когда выпускается новая младшая версия.Есть ли более интеллектуальный способ достижения этого агентом-агностиком?
Ссылка
How do you link to a specific version of a shared library in GCC
Если вы уже сделали некоторые символы доступными только в более высоких версиях библиотеки, вам не придется беспокоиться о конкретной версии библиотеки; приложения будут работать только в версиях библиотеки, содержащих все используемые ими символы. –
Для пункта 2, я думаю, вы хотите дать свой lib soname (libfoo.so.0 выглядит хорошо). –