源文件通过编译可以生成目标文件(例如 GCC 下的 .o 和 Visual Studio 下的 .obj),并提供一个头文件向外暴露接口,除了保护版权,还可以将散乱的文件打包,便于发布和使用。
实际上我们一般不直接向用户提供目标文件,而是将多个相关的目标文件打包成一个静态链接库(Static Link Library),例如 Linux 下的 .a 和 Windows 下的 .lib。
打包静态库的过程很容易理解,就是将多个目标文件捆绑在一起形成一个新的文件,然后再加上一些索引,方便链接器找到,这和压缩文件的过程非常类似。
C语言在发布的时候已经将标准库打包到了静态库,并提供了相应的头文件,例如 stdio.h、stdlib.h、string.h 等。
Linux 一般将静态库和头文件放在/lib
和/user/lib
目录下,C语言标准库的名字是libc.a
,大家可以通过locate
命令来查找它的路径:
$ locate libc.a /usr/lib/x86_64-redhat-linux6E/lib64/libc.a $ locate stdio.h /usr/include/stdio.h /usr/include/bits/stdio.h /usr/include/c++/4.8.2/tr1/stdio.h /usr/lib/x86_64-redhat-linux6E/include/stdio.h /usr/lib/x86_64-redhat-linux6E/include/bits/stdio.h