Скажем, у меня есть библиотека 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, прежде чем не загружать символы.
ИЗМЕНИТЬ
Вот точная ситуация.
У нас есть 3 игрока:
-
libbar.so.1, разделяемая библиотека, расположенная в пути не вLD_LIBRARY_PATHилиldconfig, и все зависимости которого разрешены -
libfoo.so.1, разделяемая библиотека, расположенная в другом каталоге, чемlibbar, но которая зависит отlibbar. Во время выполненияlibfooбудет знать, где найтиlibbar. -
App, двоичное приложение, которое необходимо загружатьlibfooв какой-то момент во время выполнения.
App не знает, где найти libbar, но знает, что libfoo знает. Я пытаюсь выполнить функцию init в libfoo, которая просто изменит текущий рабочий каталог App туда, где расположен libbar, чтобы окончательно разрешить все зависимости и сделать всех счастливыми.
libfoo в конечном итоге потребуется вызвать материал в libbar, просто не в этой функции init. Я не думаю, что создание заглушки будет работать, так как в конечном итоге символы должны будут разрешаться для реальных функций.