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

时间:2011-10-06 15:53:15

标签: c++ c static-libraries

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

3 个答案:

答案 0 :(得分:11)

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

您可能需要查看维基百科中的斜体或其他内容以获取更多信息。

答案 1 :(得分:4)

我认为wikipedia解释得很好:

  

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

答案 2 :(得分:3)

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

相关问题