如何解决解决两个共享库的重复符号的最佳方法?
我正在尝试实现一些程序,该程序链接两个共享库libA
和libB
。
在执行程序时,由于功能符号重复,我遇到了意外的行为,即调用了意外的库函数。 (实际上,我在使用dlmopen
和自定义加载程序的模拟器上运行了程序。如果我的问题似乎是我的环境所特有的,而不是普通程序所特有的,请让我知道。)
让我描述一下细节。
libA
链接另一个名为libBB
的共享库,该共享库类似于libB
。
由于libBB
和libB
相似,因此它们都具有针对同一符号(例如duplicated_func
)的函数实现。
当我尝试运行程序时,预期的行为如下。
- 程序调用{{1}}的库函数(例如
Afunc
)。 - 在
libA
中,它调用Afunc
的库函数(称为duplicated_func
)。
但是,程序意外执行如下。
- 程序调用{{1}}的库函数
libBB
。 (与上述相同) - 在
Afunc
中,它调用称为libA
的(错误)重复的库函数,即,跳转到Afunc
。 (实际上,它需要跳到duplicated_func
,但不是)
libB
和libBB
都是C库。
我还在Linking two shared libraries with some of the same symbols中找到了答案。但是,我不能使用libB
,因为我需要使用libBB
。另外,由于使用了系统库,因此无法直接修改库源。
有关更多信息,Ubuntu软件包系统已安装-Bsymbolic
LD_PRELOAD
,而libB
是手动编译(并安装)的libevent
。
任何解决这种情况的建议将不胜感激。
如何使用静态版本的libBB
?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。