Скажем, у меня есть библиотека libfoo.so.1
, которая зависит (согласно ldd
) от libbar.so.1
. Однако libbar.so.1
в данный момент недоступен. Мое приложение должно вызывать функцию в libfoo.so.1
, которая вообще не требует libbar.so.1
.
Есть ли способ загрузить libfoo.so.1
, разрешить символ функции и затем вызвать его, не имея libbar.so.1
для удовлетворения зависимости? Это случай «я знаю, что я делаю, просто дайте мне сделать это уже». Я попробовал флаг RTLD_LAZY, но он все еще пытается загрузить библиотеку libbar.so.1
до , а не загрузки символов.
EDIT
Вот точная ситуация.
У нас есть 3 игрока:
libbar.so.1
, разделяемая библиотека, расположенная в пути не в LD_LIBRARY_PATH
или ldconfig
, и чьи зависимости разрешены
libfoo.so.1
, общая библиотека, расположенная в другом каталоге, чем libbar
, но зависит от libbar
. Во время выполнения libfoo
будет знать, где найти libbar
.
App
, двоичное приложение, которое должно загружать libfoo
в определенный момент во время выполнения.
App
не знает, где найти libbar
, но знает, что libfoo
знает. Я пытаюсь выполнить функцию инициализации в libfoo
, которая просто изменит текущий рабочий каталог App
на расположение libbar
, чтобы окончательно разрешить все зависимости и сделать всех счастливыми.
libfoo
будет в конечном итоге потребуется вызывать вещи в libbar
, только не в этой функции инициализации. Я не думаю, что создание заглушки сработает, поскольку символы в конечном итоге должны будут соответствовать функциям real .