【发布时间】:2013-01-23 12:09:34
【问题描述】:
我有第 3 方库 A,这需要一些库 B。 A 链接到二进制文件,该二进制文件与静态版本 B 链接。 因此不再需要动态版本的B。
A 不在我的控制之下,我无法重新编译它。因此,我想从 A 的 DYNAMIC 部分中删除 NEEDED libA 条目。
有没有办法使用 objcopy 或其他工具来做到这一点?
【问题讨论】:
-
有 90% 或更高的几率删除 NEEDED 条目只会产生无法解决的符号错误(如果你很幸运)或出现故障的程序(如果你不那么幸运,由于重复数据必须是唯一的)。您应该将二进制文件重新链接到库 B 的动态版本。
-
@Zack 我将我的二进制文件与 B 的静态版本相关联,因此不应该有未解析的符号。你还觉得我会有问题吗?
-
是的。您的二进制文件仅包含二进制文件本身使用的 B 子集。这对于 A 来说也很可能是不够的。为什么链接 B 的动态版本会出现问题?
-
@Zack 我不想在生产服务器上安装 B,因为有其他版本的 B。这两个版本的 B 可能会冲突。
-
@Zack 但是 A 是二进制的一部分,所以它的所有未定义符号都应该在与 A 和 B 的二进制链接时解析。我正确吗?
标签: linux gcc linker static-linking elf