1.C语言编译器
历史上,C语言编译器被称为cc。在起草POSIX标准时,因为已经不可能制订出兼容所有厂商的标准cc命令了,所以POSIX委员会决定为C语言编译器创建新的命令,即为c89。只要使用这个命令,在任何机器上,它的编译选项都是相同的。
2.头文件
对C语言,头文件几乎总是在/usr/include目录及其子目录下面。那些依赖于特定Linux版本的头文件通常可以在目录/usr/include/sys和/usr/include/linux中找到
调用C编译器时,可以用 -I 标志来包含在子目录或非标准目录中的include文件
3.库文件
标准系统库文件目录:/lib和/usr/lib,编译器默认情况下只搜索标准目录下的库文件。可以编译时给出完整的库文件名让编译器搜索指定目录下的库文件,如:
cc -o fred fred.c /usr/lib/libm.a
也可以写成如下形式:
cc -o fred fred.c -lm
库文件名必须是lib开头,随后的部分指明这是什么库,如m表示数学库。后缀 .a 表示这是静态库,后缀 .so 表示这是动态库。
-L 选项指定库文件搜索路径,注意这里是路径,没有文件名。
4.静态库
静态库使用使用ar命令来创建,如:ar cvf libfoo.a bill. fred.o
在某些系统上,还必须为函数库生成一个内容表,通过使用命令ranlib命令来完成这一步,如:ranlib libfoo.a
静态情况下,他把库直接加载到程序里,而在动态链接的时候,他只是保留接口,将动态库与程序代码独立。这样就可以提高代码的可复用度,和降低程序的耦合度。
另外,运行时,要保证主程序能找到动态库,所以动态库一般发布到系统目录中,要么就在跟主程序相对很固定的路径里,这样不管主程序在本机何时何地跑,都能找得到动态库。而静态库只作用于链接时,运行主程序时,静态库文件没存在意义了