静态库是如何工作的?(C / c++)

How static libraries work? (C/C++)

本文关键字:c++ 何工作 静态 工作      更新时间:2023-10-16

我知道如何使用和创建它们,但我找不到关于它是如何实现的文本,函数调用是如何发生的等等,有人能帮助我提供这些信息吗?因为我想了解它们,而不仅仅是知道它是什么以及它是如何工作的

您可能知道,当您编译源文件时,您会得到一个目标文件。根据您的平台,它的扩展名可能是。o或。obj或其他任何东西。静态基本上是目标文件的集合,有点像.zip文件,但可能没有压缩。当链接器试图生成可执行文件时,试图解析引用的符号,即定位在哪个目标文件(无论是在库中还是其他)中定义它们并将它们链接在一起。因此,静态库也可以包含已定义符号的索引,以便于实现这一点。确切的实现取决于特定的链接器和库文件格式,但基本架构如上所述。

你可能想要查看维基百科中斜体的关键字或其他有关它们的更多信息

我认为维基百科解释得很好:

在计算机科学中,静态库或静态链接库是被解析的一组例程、外部函数和变量在编译时调用程序中,并由编译器、链接器或绑定器,生成目标文件和独立的可执行文件。此可执行文件和编译过程它们都被称为程序的静态构建。从历史上看,库只能是静态的。静态库要么被合并在构建/链接期间使用其他静态库和目标文件以形成单个可执行文件,或者它们可以在运行时加载到加载的可执行文件在静态内存偏移量处的地址空间在编译时/链接时确定。

静态库纯粹是.o文件的集合,放在一个类似zip文件的归档文件中(没有压缩)。当您使用它进行链接时,链接器将在库中搜索提供主程序中任何缺失符号的.o文件,并拉入这些.o文件进行链接,就像它们已经包含在命令行中一样,就像主程序中的.o文件一样。这个过程是递归地应用的,所以如果从库中拉入的任何.o文件有未解析的符号,则将再次搜索库中提供定义的其他.o文件。