静态链接:
一个程序进行编译成可执行文件的过程,可以分解为4个步骤,分别时预处理、编译、汇编和链接。
而所谓的静态链接,便是在链接的过程之中处理库的时候,调用静态库将每个模块的源代码文件(如.c)经过编译器编译成的目标文件(如.o/.obj)和库一起链接最终形成可执行文件。
静态链接对于计算机内存和磁盘空间浪费非常严重。
目标文件:
Linux下目前流行的可执行文件格式是ELF,静态和动态链接库的文件都按照可执行文件的格式存储,ELF文件主要包括四类:可重定位文件(Relocatable File)、可执行文件(Executable File)、共享目标文件(Shared Object File)、核心转储文件(Core Dump File)。在Linux下使用file命令来查看相对应的文件格式。
下面我们对文件进行编译来进一步分析目标文件。
$ gcc -c text.c
编译之后我们可以得到一个.o的目标文件,我们可以用工具objdump来查看一下文件的结构和内容。
$ objdump -h text.o
我们可以看到除了基本的代码段之外,还包括以下几个段,具体各个段的功能可以自己去搜索一下。
参考资料:《程序员的自我修养》