静态和动态地链接同一个库

时间:2009-08-06 01:03:42

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

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

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

1 个答案:

答案 0 :(得分:5)

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

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

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

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

一个问题:如果libA使用静态变量,则libB.so可以访问一组静态,并且应用程序可以访问不同的独立静态集。