Распределить общий объект с помощью исполняемого файла (передовой опыт?)

0

Мне нужно распространять версию OpenSSL с моим приложением. Я не могу использовать Ubuntu, потому что дистрибутив в настоящее время отключает TLSv1.1 и TLSv1.2.

Я прочитал несколько сообщений о том, как разрешить отсутствующий общий объект (например, Как добавить путь поиска совместно используемой библиотеки к исполняемому файлу?).

Я беспокоюсь, что у меня есть библиотека, которая имеет то же имя, что и имя disto, и ее двоичный файл, совместимый с дистрибутивом.

Мой вопрос в том, есть ли наилучшая практика для распределения общих объектов, где ожидается столкновение?

Теги:
shared-libraries
ld

2 ответа

2

Поместите SO в частный каталог и добавьте этот каталог в $LD_LIBRARY_PATH среды $LD_LIBRARY_PATH в сценарии оболочки перед запуском исполняемого файла.

  • 0
    Спасибо Игнасио. Есть две проблемы с этим (извините, я должен был перечислить их). Во-первых, я не хочу, чтобы люди должны были LD_LIBRARY_PATH. Во-вторых, это выполняется от имени пользователя root, поэтому LD_LIBRARY_PATH не учитывается (даже с sudo -E ).
  • 0
    @noloader люди не должны устанавливать LD_LIBRARY_PATH, вы создаете сценарий оболочки, размещаете его вместе с исполняемым файлом, сценарий оболочки устанавливает LD_LIBRARY_PATH и запускает исполняемый файл. Люди запускают скрипт оболочки (например, с sudo) вместо реального исполняемого файла.
Показать ещё 1 комментарий
1

В отличие от установки переменной среды LD_LIBRARY_PATH в сценарии оболочки, вы также можете скомпилировать свой исполняемый файл с дополнительными флагами компоновщика, которые добавляют каталоги для поиска разделяемых библиотек.

Флаг компоновщика - -Wl,-rpath,<path to lib directory>

Например, скажем, что вы устанавливаете свое приложение в /opt/myapp/bin, у вас также может быть папка /opt/myapp/lib, и в этой папке вы помещаете свой libssl.so. Затем вы скомпилируете свое приложение с дополнительным флагом компоновщика -Wl,-rpath,/opt/myapp/lib. Затем, когда вы запустите приложение, оно будет выглядеть в этой папке прежде, чем искать стандартные папки для разделяемых библиотек.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню