Мне нужно распространять версию OpenSSL с моим приложением. Я не могу использовать Ubuntu, потому что дистрибутив в настоящее время отключает TLSv1.1 и TLSv1.2.
Я прочитал несколько сообщений о том, как разрешить отсутствующий общий объект (например, Как добавить путь поиска совместно используемой библиотеки к исполняемому файлу?).
Я беспокоюсь, что у меня есть библиотека, которая имеет то же имя, что и имя disto, и ее двоичный файл, совместимый с дистрибутивом.
Мой вопрос в том, есть ли наилучшая практика для распределения общих объектов, где ожидается столкновение?
Поместите SO в частный каталог и добавьте этот каталог в $LD_LIBRARY_PATH
среды $LD_LIBRARY_PATH
в сценарии оболочки перед запуском исполняемого файла.
В отличие от установки переменной среды LD_LIBRARY_PATH в сценарии оболочки, вы также можете скомпилировать свой исполняемый файл с дополнительными флагами компоновщика, которые добавляют каталоги для поиска разделяемых библиотек.
Флаг компоновщика - -Wl,-rpath,<path to lib directory>
Например, скажем, что вы устанавливаете свое приложение в /opt/myapp/bin
, у вас также может быть папка /opt/myapp/lib
, и в этой папке вы помещаете свой libssl.so
. Затем вы скомпилируете свое приложение с дополнительным флагом компоновщика -Wl,-rpath,/opt/myapp/lib
. Затем, когда вы запустите приложение, оно будет выглядеть в этой папке прежде, чем искать стандартные папки для разделяемых библиотек.
sudo -E
).