我有第三方库 A ,需要一些库 B 。 A 链接到binrary,后者与静态版本 B 相关联。 因此,不再需要 B 的动态版本。
A 不受我的控制,我无法重新编译。因此,我想从 A 的 DYNAMIC 部分删除NEEDED libA
条目。
有没有办法用objcopy或其他工具来做?
答案 0 :(得分:1)
有没有办法用objcopy或其他工具来做?
我不知道任何可以执行此操作的现有工具,尽管elfsh可能会这样做。
编写一个C程序来做你想做的事情是非常简单的:.dynamic
的{{1}}部分是一个固定大小的记录表(类型为libA.so
),终止通过ElfW(Dyn)
的条目。要删除特定的.d_type == DT_NULL
条目,只需“滑动”以下所有条目(使用DT_NEEDED
覆盖entry[n]
等)。这将使您的entry[n+1]
在最后留下两个.dynamic
条目,但没有任何关注。
一个复杂因素是,如果DT_NULL
包含libB.so
引用的版本化符号,那么libA.so
表中会有libB.so
的其他引用,这些更难以摆脱。如果你没有删除DT_VERNEED
引用,动态链接器将失败断言。