jma*_*erx 16 c c++ linker static-libraries
说我有libA.它取决于例如libSomething,因为libA的非内联方法调用了libSomething.h中的方法.在这种情况下,依赖关系如何链接?libA在编译时是否必须静态链接到libSomething,或者libA(使用libA的应用程序)的用户是否需要链接到libA和libSomething?
谢谢
静态库或多或少是未链接的二进制目标文件(*.o或*.obj)的简单归档,在编译归档时,不会对依赖项进行检查.当链接一个二进制可执行文件(或共享库/ DLL)时,链接器会检查所有必需的依赖项,然后才会提醒您任何问题.
在构建过程中,编译器将代码转换为临时格式,我们称之为目标文件。在目标文件中,有一个编译器无法解析的符号列表,通常是其他地方的定义。链接阶段负责解析这些符号。
构建过程将文件提供给链接器,直到解析所有符号。没有物理依赖列表,只有要解析的符号列表。这允许使用不同的库来解析符号。例如,人们可能希望使用 Windows 库来解决 Windows 特定问题;针对 linux 特定问题的 linux 库。这并没有明确说明程序依赖于 Windows 库;它也可能依赖于 Linux。
一些编译器可以生成依赖项列表,通常用于构建过程。然而,最终的责任在于程序员。