Указание версии в имени файла для общей библиотеки

Сейчас я разрабатываю совместную библиотеку с перекрестной платформой, и я немного запутался в правильном способе работы на * nix. Мой план для версий довольно стандартный, майоры нарушают интерфейсы, несовершеннолетние добавляют к интерфейсам, но остаются совместимыми со старыми версиями, а номера патчей – это исправления / улучшения ошибок, которые не затрагивают интерфейсы. Это означает, что несовершеннолетние должны увеличивать версию SO.

Итак, имя файла для библиотеки – libNAME.so.XYZ для версии библиотеки XYZ , а имя для установки – libNAME.so.XY . Моя проблема здесь в том, что когда я обновляю свой младший, мне бы хотелось, чтобы существующие связанные исполняемые файлы использовали новую библиотеку (поскольку они совместимы с обратным доступом вплоть до X.0.0), но исполняемые файлы связаны со старым младшим libNAME.so.XY . Итак, значит ли это, что мне нужно поддерживать список символических ссылок для всех второстепенных версий ниже текущего и обновлять их все, чтобы указывать на новую библиотеку каждый раз при обновлении моей общей библиотеки?

    One Solution collect form web for “Указание версии в имени файла для общей библиотеки”

    Программы, использующие вашу библиотеку, должны связываться с libNAME.so если они хотят последней версии, с libNAME.so.X если они хотят последней из основной версии X , и с libNAME.so.XY если они хотят получить определенную второстепенную версию.

    Если вы просто предоставите дополнительные ссылки для libNAME.so , libNAME.so.X и libNAME.so.XY на libNAME.so.XYZ они будут использовать последнюю версию, и вы всегда можете обновить эти ссылки.

    Предположим, что версия, которую вы устанавливаете, ударяет по второстепенной версии, до этого времени были бы ссылки (предположим, что Y-1 – это число до Y и z – последний патч-уровень для серии XY-1):

     libNAME.so -> libNAME.so.XY-1.z libNAME.so.X -> libNAME.so.XY-1.z libNAME.so.XY-1 -> libNAME.so.XY-1.z 

    после установки обновления (Z, вероятно, 0, возможно, 1):

     libNAME.so -> libNAME.so.XYZ libNAME.so.X -> libNAME.so.XYZ libNAME.so.XY-1 -> libNAME.so.XY-1.z libNAME.so.XY -> libNAME.so.XYZ 

    любая программа, явно связанная с использованием XY-1, все равно найдет файл XY-1.z.

    Следуя этой схеме, нет необходимости обновлять ни одну из предыдущих ссылок, кроме указанных, и вы можете определить, какие из них связаны с изменением вашего основного, младшего или патча (1, 2, соответственно 3 ссылки).

    Раньше это было гораздо более распространено, когда в вашей системе были старые версии библиотек с этими «промежуточными» ссылками. Но управление пакетами часто отнимает старые версии.

    ¹ Мне всегда нравился этот способ делать что-то, полагаясь на ссылки, чтобы получить последнюю версию, если явным образом не просил более старую. На конференции Microsoft MFC (1994), где библиотеки DLL были представлены как решение для общих библиотек, я указал докладчику на проблему доступа к старым версиям без такой уже проверенной схемы. Фраза «DLL ад» все еще должна была быть изобретена в этот момент.

    Interesting Posts

    Двоичный, не доступный из Bash, несмотря на то, что он находится в пути

    Списки контроля доступа и разрешения на каталог

    Запустите команду до запуска служб

    Как удалить русские и арабские строки из текстового файла

    Могу ли я получить DHCP-адрес из контейнера через DHCP-сервер, на котором находится хост?

    Как использовать как открытые, так и проприетарные видеодрайверы на одном компьютере?

    Что делает ТАБ (ничего не набирается)

    Показать все имена файлов, присутствующие в PWD, и каталог на 3-м уровне

    Как заставить Debian запускать скрипт m python при запуске?

    CSV-обработка файлов – удалите кавычки и замените разделитель запятой на вкладку

    При использовании $ hash_array

    Может ли Awk читать экранированные строки? Т.е. читать прошлые строки

    Как бороться с большим количеством ошибок страницы?

    Переменные личной среды Конвенции

    Поиск количества файлов в системе btrfs без использования find

    Linux и Unix - лучшая ОС в мире.