我对Linux的加载libfoo.so.1
一个可执行文件(这是一个SONAME
)作为它的一个依赖(通过另一个共享库)。它也链接到另一个系统库,这反过来,链接到系统版本,libfoo.so.2
。因此,均为libfoo.so.1
和libfoo.so.2
在执行期间被加载,并且应该从版本为1的库调用函数的代码最终会从具有版本2的较新系统库调用(二进制不兼容)函数,因为某些符号保留一样。结果通常是堆栈粉碎和随后的段错误。加载多个共享库
现在,与旧版本链接的库是一个封闭的第三方源库,我无法控制它编译的版本libfoo
。假设,剩下的唯一选择是重建一系列当前与libfoo.so.2
链接的系统库以链接libfoo.so.1
。
有什么办法避免更换系统库wiith链接到旧的libfoo
本地副本?我可以加载这两个库并让代码调用正确版本的符号吗?所以我需要一些特殊的符号级版本?
Alex:你是怎么解决这个问题的?你可以和我们分享吗? – Nawaz 2017-12-29 11:07:29