静态库
静态库是obj文件的一个集合,是一种函数库,通常以“.a”为后缀。静态库由程序ar生成。
静态库的优点是可以在不用重新编译程序库代码的情况下,进行程序的重新链接,这种方法节省了编译过程的时间。
静态库的另一个优点是开发者可以提供库文件给使用人员,不用开放源代码。
理论上,静态库的执行速度比共享库和动态库要快(1%~5%)
1.生成静态链接库
生成静态库,或者将一个obj文件加到已经存在的静态库的命令为“ar库文件 obj文件1 obj文件2”。创建静态库的最基本步骤是生成目标文件,然后使用工具ar对目标文件进行归档。工具ar的-r选项,可以创建库,并把目标文件插入到指定库中。
#ifdef HELLO_H #define HELLO_H Void hello(const char* name); #endif
程序1:hello.h
#include<stdio.h> Void hello(const char* name) { printf(“Hello %s!\n”,name); }
程序二:hello.c
#include<stdio.h> Int main() { hello(“everynoe”); Return 0; }
程序3:main.c
步骤一:编辑得到程序 hello.c hello.h main.c
步骤二:将hello.c编译成.o文件
gcc -c hello.c
运行ls命令看是否生成了hello.c文件
hello.c hello.h hello.o main.c
步骤三:由.o文件创建静态库
静态库文件名的命名规范是以lib为前缀,紧接着跟静态库名,扩展名为a。例如我们将创建的静态库名为myhello,则静态库文件名是libmyhello.a。在创建和使用静态库时,需要注意这点。创键态库用ar 命令。
ar cr libmyhello.a hello.o 运行ls命令查看结果 hello.c hello.h hello.o libmyhello.a main.c
步骤四:在程序中使用静态库
只需要在使用到这些共用函数的源程序中包含这些公用函数的原型声明,然后在用gcc命令生成目标文件时指明静态库名,gcc将会从静态库中将公用函数连接到目标文件中。注意,gcc会在静态库名前加上前缀lib,然后追加扩展名.a得到静态库文件名来查找静态库文件
在main.c中,包含了静态库的头文件hello.h,然后在主程序main中直接调用公用函数hello。下面先生成目标程序hello,然后运行hello程序看看结果
gcc -o hello main.c libmyhello.a ./hello Hello everynoe!
程序照常运行,静态库中的公用函数已经连接到目标文件中。