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

Сейчас я разрабатываю совместную библиотеку с перекрестной платформой, и я немного запутался в правильном способе работы на * 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

    CentOS: приоритет трафика UDP на основе номера порта UDP?

    Как создать имя файла для моего приложения электронной почты?

    Что такое пароль суперпользователя?

    Восстановление MDADM Raid 5 в LVM с плохими блоками

    Минимизация «простоя» записи в файловой системе

    Почему пользовательские программы всегда устанавливаются в / opt, / srv, / usr / local и т. Д., А не в папку ~ / (home)?

    Сделать поле только общаться только на LAN?

    Как отсортировать несколько столбцов со столбцом, включая дату?

    Почему пароль «sudo» отличается от пароля su?

    При подключении Wi-Fi, как открыть браузер автоматически?

    Могу ли я запустить gedit при запуске со списком определенных файлов?

    Синхронизировать почту с помощью offlineimap через службу / таймер systemd; получение пароля из гнома

    Шифрование файлов (закрытый ключ и т. Д.) Во встроенной системе

    Как установить WiFi и графический драйвер в Debian 9?

    Поиск подстроки в файлах в подкаталогах с помощью одной встроенной команды?

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