App A需要第三方库B和C.B和C都包含不同版本的库D(来自另一个第三方)。 没有第三方源代码可用。 链接应用程序时会出现重复的符号错误。
有哪些解决方案?
涉及相同库的相关问题,只允许删除一个副本:How to handle duplicate symbol error from 3rd party libraries?
答案 0 :(得分:0)
这是通过重命名B中的冲突符号(如果是单独的D的版本)来解决的。 这可以直接在二进制文件上完成,只要重命名与原始文件的长度相同(例如,通过反转库前缀)。
local $/ = "\0";
open my $fh, '<+', $library;
binmode $fh;
while (my $field = <$fh>) {
my $length = length $field;
chomp $field;
if (defined $translation{$field}) {
seek $fh, -$length, SEEK_CUR;
print $fh $translation{$field};
}
}