我有一个旧的 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
资源来重新完成并正确地重新链接它。