假设我有一个图书馆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函数中。我认为创建存根不起作用,因为符号最终将需要解析为实际功能。
好的,即使使用,变量仍然可以解析RTLD_LAZY
,因此通常您确实需要链接所有库。似乎您应该创建一个libbar.so.1
没有功能且可由链接程序找到的存根。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句