如果 AIX 动态库从错误的位置导入某个符号会怎样

如果 AIX 动态库从错误的位置导入某个符号会怎样

我有一个旧的 AIX ppc64 库mylib.so

检查dump -Tv输出,我注意到它期望Foo符号会出现在更旧的库中oldfoo.so。然而,似乎在新的 foo 发布后,他们将Foo符号移到了其他 soname:foocommon.so并且oldfoo.so不再导出它,而是从中导入foocommon.so

因此mylib.so被破坏,动态链接器拒绝处理与 链接的二进制文件mylib.so,称Foo不是从 导出的oldfoo.so

确实不是,它现在位于foocommon.so。我能以某种方式编辑二进制文件mylib.so、更改符号的实际位置的名称Foo或以其他方式告诉动态链接器在哪里查找吗?

我曾尝试设置环境变量:

export LDR_PRELOAD=foocommon.so
export LDR_PRELOAD64=foocommon.so

希望常规的 Linux 方法能够起作用,但这并没有改变链接器产生的错误,仍然拒绝运行我的可执行文件,因为Foo符号不是由导出的oldfoo.so

这尤其模糊,因为不清楚是否仍有mylib.so资源来重新完成并正确地重新链接它。

相关内容