链接两个冲突版本的库

时间:2016-09-21 05:27:51

标签: linux linker symbols

第三方供应商正在向我发布预构建的安全库,但我无法访问它的代码或makefile。该库是针对openssl& amp;的特定版本编译的。 protobuf的。问题是,我使用的应用程序chrome还使用了这两个库的修改版本(嗯,技术上,boringssl不是openssl;但它们共享符号)。它们与铬源一起编译并静态链接。当我将安全库添加到chrome时,我最终得到了两个冲突版本的库和针对不同标头编译的对象。这当然会导致运行时崩溃和不可预测的结果。有什么我可以做的,以确保一切正确链接,符号不冲突?

1 个答案:

答案 0 :(得分:0)

  

我能做些什么来确保所有内容都正确链接并且符号不会发生冲突吗?

你唯一真正的选择是:

  1. 在第三方库中使用dlopen(..., RTLD_LOCAL);
  2. 请供应商为您提供针对Chromium树构建的版本。
  3. 完全停止使用此第三方库。
  4. Petesh提出的解决方案 - 将openssl和protobuf静态链接到第三方库并隐藏其符号 - 看起来像另一种可能性,但具有许可影响。看起来protobuf和openssl都允许二进制重新分配,所以这实际上可以工作,但IANAL。