linux - 链接库的 2 个冲突版本

标签 linux linker symbols

第三方供应商正在向我发布一个预构建的安全库,但我无法访问它的代码或 makefile。这个库是针对特定版本的 openssl 和 protobuf 编译的。问题是,我使用的应用程序 chromium 也在使用这两个库的修改版本(好吧,技术上 boringssl 不是 openssl;但它们共享符号)。它们正在使用 Chrome 源进行编译并静态链接。当我将安全库添加到 Chromium 时,我最终得到了 2 个针对不同 header 编译的库和对象的冲突版本。这当然会导致运行时崩溃和不可预测的结果。我能做些什么来确保一切都正确链接并且符号不冲突吗?

最佳答案

Is there anything I can do to make sure that everything is linked properly and symbols do not clash?

你唯一真正的选择是:

  1. 在第 3 方库上使用 dlopen(..., RTLD_LOCAL);
  2. 请供应商为您提供一个针对 Chromium 树构建的版本。
  3. 完全停止使用这个第 3 方库。
  4. Petesh 提出的解决方案——将 openssl 和 protobuf 静态链接到第 3 方库并隐藏它们的符号——看起来是另一种可能性,但有许可方面的问题。看起来 protobuf 和 openssl 都允许二进制重新分发,因此这实际上可能有效,但 IANAL。

关于linux - 链接库的 2 个冲突版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39608186/

相关文章:

r - 如何重复 ggplot 图例中的符号以获得更好的符号 View ?

linux - 为 bash 脚本创建应答文件

php - 如何使用我的php代码访问Linux服务器上具有不同用户权限的文件夹的文件?

c++ - 在 x64 环境中编译代码时出现 LNK2001 错误。但是代码在x86环境下编译得很好

linux - 为什么一个剥离的二进制文件在反汇编文件中仍然可以有库调用信息?

css - 在 CSS 内容值中放置 Unicode 字符

linux - 如何使用 Ansible playbook 在不更改时间戳的情况下备份文件

ruby - 如何获取另一个unix文件夹中文件的文件路径?

c++ - 即使使用 -ldl 标志,g++ 也无法链接到 libdl

php - 正则表达式匹配特定符号 ' - "( ) * , . : … ; ?`