我有2个相互冲突的共享库,以及与之相关的其他二进制文件。更详细一点,我有这样的事情:
问题在于,当我启动二进制时,由于双重免费导致的内存损坏导致崩溃:第一个来自 protobuf.so ,第二个来自 protobuf-lite.so (见related bug)。
我无法访问 top-lib2.so 来源,我无法将 top-lib1.so 与 protobuf相关联-lite.so 由于我的应用功能。
因此我的问题是:如何处理它?</ p>
由于此次崩溃我无法离开,我无法将我的lib( top-lib1.so )与 libprotobuf-lite.so重新关联,我无法更改 top-lib2.so 。
有没有办法在没有来源的情况下将 top-lib2.so 与 libprotobuf.so 重新关联?还是有其他可能吗?
答案 0 :(得分:3)
你有几个选择。
您提到的上游错误表明&#34; libprotobuf.so
包含libprotobuf-lite.so
所拥有的所有内容,以及更多&#34;。如果确实如此,一种可能的解决方案是将top-lib2.so
的{{1}}部分二进制补丁引用.dynamic
而不是libprotobuf.so
。前者较短,因此只需用-lite.so
覆盖字符串libprotobuf-lite.so
即可。
如果您不想二进制补丁libprotobuf.so\0e.so
,您还有其他选择:
您可以将包含目标文件和所有top-lib2.so
个的top-lib1.so
链接到主二进制文件中并隐藏所有libprotobuf.so
&# 39;其中的符号(通过链接描述文件)。如果您这样做,libprotobuf
无法告诉除了top-lib2.so
之外还有其他任何内容。
您可以对libprotobuf-lite.so
执行相同的操作 - 即隐藏 top-lib1.so
。
您可以将libprotobuf
的副本与libprotobuf.so
相关联,这会将-Wl,--default-symver
版本附加到从@@libprotobuf.so
导出的每个符号,并避免符号冲突首先导致问题。