在工程中很多时候我们需要把函数体与主函数分开处理,相信这种已经非常常见了,只需要在主函数文件中包含#include ”filename.c“即可,当然现在编译器已经足够聪明,不需要写#include ”filename.c“都可以自己找到编译,但是好习惯还是要养成的。而这次我编译Linux系统编程之实现who命令的时候采用的是将函数编译为静态库进行链接的形式。
首先要把函数体拿出使用gcc -c filename.c -o filename.o命令提前翻译为后缀为.o的文件。
xxx@xxx-ThinkPad-X230-Tablet:~/code/unix_linux/who$ ls
! a.out show_info.c show_info.h show_info.o showtime.c showtime.o who1.c
举例这里包含一些已经打包好的静态库,而编译时需要把主函数文件who1.c,两个静态库show_info.o,showtime.o一起编译,当然此时在主函数文件中who1.c就不能再包含#include ”filename.c“,否则编译时会重复导致出错。
这样做有什么好处呢?众所周知,计算机把C语言编译为计算机能够识别的机器码是需要占用性能的,目前函数较少感觉不出来,但是如果有成千上万个函数,而在实际中会反复多次调用一个函数,那么每次都需要去编译无疑是一种资源浪费。如果都把它们编译为.o文件,那么在使用时就可以直接链接,节省了大量的时间与性能,同时还可以以库的形式保留下来,被其它的函数直接调用。简单来讲,调用多次的情况下翻译好了再使用比用的时候翻译效率差别非常大。
有一种情况实际存在就是,你在写程序使用库的时候,