如何加载共享库而不加载它的依赖项?

前端之家收集整理的这篇文章主要介绍了如何加载共享库而不加载它的依赖项?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
说我有一个库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.

应用程序不知道在哪里找到libbar,但知道libfoo知道.我想要完成的是在libfoo中有一个init函数,它只是将App的当前工作目录更改到libbar所在的目录,以最终解决所有的依赖关系,并使大家开心.

libfoo最终将需要在libbar中调用东西,而不是在这个init函数中.我不认为创建一个存根将工作,因为符号最终将需要解决到真正的功能.

那么,即使使用RTLD_LAZY,变量仍然解决,所以一般来说,你需要所有的库被链接.好像你应该创建一个没有功能的存根libbar.so.1,可以通过链接器找到.
原文链接:https://www.f2er.com/javaschema/281850.html

猜你在找的设计模式相关文章