加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-14 00:48:02 所属栏目:百科 来源:网络整理
导读:说我有一个库libfoo.so.1,它取决于(根据ldd)libbar.so.1.但是,libbar.so.1目前不可用.我的应用程序需要在libfoo.so.1中调用一个函数,该函数根本不需要libbar.so.1. 有没有办法加载libfoo.so.1,解析函数符号,然后调用它,而不用libbar.so.1来满足依赖性?这是
说我有一个库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,可以通过链接器找到.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读