静态库链接
一个没有输入输出的程序没有任何意义,但是一个程序如何做到输入输出呢?最简单的办法是使用操作系统提供的应用程序编程接口(API,Application Programming Interface)。
在一般的情况下,一种语言的开发环境往往会附带有语言库(Language Library),这些库就是对操作系统的API的包装。
其实一个静态库可以简单地看成一组目标文件的集合,即很多目标文件经过压缩打包后形成的一个文件。
我们知道在一个C语言的运行库中,包含了很多跟系统功能相关的代码,比如输入输出、文件操作、时间日期、内存管理等。glibc本身是用C语言开发的,它由成百上千个C语言源代码文件组成,也就是说,编译完成以后有相同数量的目标文件,把这些零散的目标文件直接提供给库的使用者,很大程度上回造成文件传输、管理和组织方面的不便,于是通常人们使用“ar”压缩程序将这些目标文件压缩到一起,并且对其进行编号和索引,以便于查找和检索,就形成了libc.a这个静态库文件。
ld链接器会处理这一切繁琐的事务,自动寻找所有需要的符号及它们所在的目标文件,将这些目标文件从libc.a中解压出来,最终将它们链接在一起成为一个可执行文件。
PS.静态运行库里面一个目标文件只包含一个函数。