【问题标题】:Statically and dynamically linking the same library静态和动态链接同一个库
【发布时间】:2009-08-06 01:03:42
【问题描述】:

我有一个静态链接到库 (libA.2.0.a) 并动态链接到另一个库 (libB.so) 的程序。 libB.so 还动态链接到旧版本的 libA (libA.1.0.so)。

这种配置可行吗?如果是这样,系统如何知道将libA.2.0.a 中的符号用于我的程序,将libA.1.0.so 中的符号用于libB.so

【问题讨论】:

    标签: c static-libraries dynamic-linking static-linking


    【解决方案1】:

    是的,这种配置是可能的。

    在回答您关于系统如何知道如何使用符号的问题时,请记住所有链接都发生在构建时。建好之后,就不是“符号”的问题了,只是在各个地址调用各个函数。

    在构建 libB.so 时,它会设置到 libA.1.0.so 的链接。它不知道也不关心使用它的其他应用程序会做什么,它只知道如何映射自己的函数调用。

    在构建应用程序本身时,应用程序链接到 libB.so。无论 libB.so 调用什么,应用程序都完全不知道。该应用程序还静态链接到 libB.so 不关心的库。

    一个问题:如果 libA 使用静态变量,那么 libB.so 将可以访问一组静态变量,而应用程序可以访问另一组独立的静态变量。

    【讨论】:

      猜你喜欢
      • 2011-09-09
      • 2010-09-15
      • 1970-01-01
      • 1970-01-01
      • 2019-08-13
      • 1970-01-01
      • 1970-01-01
      • 2018-01-23
      • 1970-01-01
      相关资源
      最近更新 更多