说我有一个图书馆libfoo.so.1
,这取决于(根据ldd
) on libbar.so.1
。然而,libbar.so.1
目前不可用。我的应用程序需要调用一个函数libfoo.so.1
这不需要libbar.so.1
at all.
有没有办法加载libfoo.so.1
,解析函数符号然后调用它而无需libbar.so.1
来满足依赖性?这是“我知道我在做什么,就让我这么做吧”的情况。我尝试了 RTLD_LAZY 标志,但它仍然尝试加载libbar.so.1
之前的图书馆not加载符号。
EDIT
具体情况如下。
我们有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
will 最终需要调用东西libbar
,只是不在这个 init 函数中。我不认为创建存根会起作用,因为符号最终需要解析为real功能。
好吧,即使使用变量仍然可以解决RTLD_LAZY
,所以一般来说您确实需要链接所有库。看来你应该创建一个存根libbar.so.1
它没有任何功能,可以被链接器找到。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)