静态库如何链接到依赖项?

说我有libA。 它取决于例如libSomething,因为libA的非内联方法调用了libSomething.h中的方法。 在这种情况下,依赖关系如何链接? libA在编译时是否必须静态链接到libSomething,或者libA用户(使用libA的应用程序)是否需要链接到libA和libSomething?

谢谢

静态链接只是将整个项目(函数,常量等)复制到生成的可执行文件中。 如果静态库的代码包含对某些共享库项的引用,则这些引用将成为生成的可执行文件中的依赖项。 如果链接库而不是可执行文件,则同样适用。

这个主题讨论它在Linux中是如何发生的。

静态库或多或少是未链接的二进制目标文件(* .o或* .obj)的简单归档,在编译归档时,不会对依赖项进行检查。 当链接一个二进制可执行文件(或共享库/ DLL)时,链接器会检查所有必需的依赖项,然后才会提醒您任何问题。

在构建过程中,编译器将代码转换为临时格式,让我们将其称为目标文件。 在目标文件中,有一个编译器无法解析的符号列表,通常是别处的定义。 链接阶段负责解析这些符号。

构建过程将文件提供给链接器,直到解析完所有符号。 没有物理依赖列表,只有要解析的符号列表。 这允许通过使用不同的库来解析符号。 例如,有人可能希望将Windows库用于Windows特定问题; 一个用于linux特定问题的linux库。 这没有明确声明程序依赖于Windows库; 它也可能依赖于Linux。

一些编译器可以生成依赖项列表,通常用于构建过程。 但是,最终的责任取决于程序员。