假设我有一个库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
or中的路径中的共享库ldconfig
,并且其依赖关系都已解决libfoo.so.1
,一个共享库,位于与 不同的目录中libbar
,但取决于libbar
. 在运行时,libfoo
会知道在哪里定位libbar
.App
,一个二进制应用程序,需要libfoo
在运行时的某个时间点加载。
App
不知道在哪里可以找到libbar
,但知道libfoo
知道。我想要完成的是拥有一个 init 函数,libfoo
其中只需将App
' 的当前工作目录更改libbar
为最终解决所有依赖项并使每个人都开心的位置。
libfoo
最终需要调用 in 的东西,libbar
而不是在这个 init 函数中。我不认为创建存根会起作用,因为符号最终需要解析为实际功能。