【问题标题】: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 将可以访问一组静态变量,而应用程序可以访问另一组独立的静态变量。