gpt4 book ai didi

c - 链接到静态库的多个版本

转载 作者:IT王子 更新时间:2023-10-29 01:16:37 26 4
gpt4 key购买 nike

我的项目链接到静态库 libA.a 版本 1。

此可执行文件还链接到另一个静态库 B。B 链接到 A,但版本 2。

A 的版本 1 和版本 2 中的两个符号集是相同的。如果我知道在我的项目和 B 之间没有共享任何与 A 相关的内容,这是否可行?

我设法手动链接它,它似乎可以工作(也许有我不知道的陷阱)。

我无法将库 B 设为共享对象,也无法将 A 用作共享对象。实际上,我只知道 B 正在静态使用 A,因为我和写 B 的人谈过。

最佳答案

我有待纠正,但您似乎可以通过仔细的编译过程和明智地使用 objcopy 来完成您想要的。您应该遵循的步骤是:

  1. 编译 A 的版本 2。
  2. 针对 A2 编译库 B。
  3. 将 B 和 A2 合并为一个库 C(相关讨论参见 this page)。
  4. 通过使用 objcopy 创建 C2,将 A2 中存在于 C 中的所有符号本地化。使用 objcopy --localize-symbols infile outfile,然后查看 here了解详情。
  5. 编译 A 的版本 1。
  6. 编译您的应用 (P)。
  7. 链接 P A1 和 C2。

我从未在实践中这样做过,但所有构建基 block 似乎都已就位。第 4 步是最难的,因为您必须识别所有冲突的符号 - 可能是手动的。

关于c - 链接到静态库的多个版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13931368/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com