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

У меня есть приложение для Linux, которое работает в двух разных файловых системах. 1 файловая система имеет общие библиотеки, с которыми я связываюсь (например, -lssl), другая - нет (потому что она слишком велика для добавления).

При использовании файловой системы меньшего размера без наличия libssl.so приложение не будет выполняться, поскольку оно не может динамически компоноваться.

Если бы я собирался пройти процесс динамической загрузки lssl, когда я хочу его использовать, нужно ли приложению все еще просто выполнять? Даже если вызовы libssl никогда не делались?


person user3821741    schedule 29.06.2017    source источник
comment
... он не может динамически связываться, потому что он не может динамически связываться. -- Может быть, мне тоже следует начать объяснять вещи таким образом. Это намного быстрее писать, и это гарантированно будет точным!   -  person sawdust    schedule 30.06.2017
comment
извините - отредактировано для ясности   -  person user3821741    schedule 30.06.2017


Ответы (1)


Вы можете загрузить библиотеку вручную, используя dlopen() и dlclose().

Изменение дизайна вашего приложения для использования dlopen и dlclose для доступа к функциям библиотеки ssl вместо связывания позволит использовать функции ssl только, когда они присутствуют. При таком подходе у вас может быть единая сборка, которая позволяет вам не связываться с библиотекой ssl (и всегда требовать ее присутствия во время выполнения).

Посмотрите здесь: dlopen

person Matt Pavlovich    schedule 29.06.2017
comment
Вы можете загрузить библиотеку вручную... -- Загрузить откуда? В вашем ответе игнорируется тот факт, что общий объект не хранится локально. Как эти функции вообще помогут ОП решить проблему? Добавить их в приложение, которое не может выполняться из-за сбоя динамического компоновщика? - person sawdust; 30.06.2017
comment
Обновлен ответ, чтобы прояснить возможность иметь одну сборку для поддержки, когда библиотека ssl присутствует, а когда ее нет. @sawdust, пожалуйста, пересмотрите -1. - person Matt Pavlovich; 30.06.2017