【问题标题】:Change in static library used by other static library其他静态库使用的静态库的变化
【发布时间】:2013-04-12 13:52:54
【问题描述】:

我的项目中有 2 个库文件 lib1.a 和 lib2.a。 Lib1.a 正在使用 lib2.a 。我已经给出了 lib2.a 的源代码,但我没有 lib1.a 的源代码。对于我的项目,我更改了 lib2.a,可以说我在函数中添加了一个局部变量。

我的问题,函数名称没有改变,我需要用改变的 lib2.a 重新编译 lib1.a 吗? 无论如何我告诉链接器“lib1.a 应该使用新的 lib2.a”而没有 lib1.a 的源代码?

【问题讨论】:

  • 这些库最初是由 C 或 C++ 编译器编译的吗?
  • 使用 C 编译器构建的库

标签: c++ c linker


【解决方案1】:

如果它只是像您所说的添加的局部变量,则不需要重建其他库。这是因为静态库通常不直接相互链接,而是可执行文件最终将它们全部链接在一起。

【讨论】:

  • 稍微扩展一下:lib1.a 将尝试指向存储 lib2.a 函数的内存位置。但问题在于,由于 lib2.a 函数与 lib1.a 不在同一个文件中,lib1.a 不知道该函数在哪里。链接器的工作是“解析”这些地址。所以链接器会知道组合这些文件,因为一个依赖于另一个。
  • 现在如果你在 lib2.a 中创建一个全新的函数,lib1.a 将不知道这个新函数,因为它不使用它。但是,你可以随意修改函数,只要原型没有改变,lib1.a 仍然可以使用它,因为它只是引用地址。
猜你喜欢
  • 1970-01-01
  • 2012-06-21
  • 2011-01-10
  • 1970-01-01
  • 1970-01-01
  • 2014-01-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多