返回首页   进站必读

9.2 静态库


9.2 静态库

9.2.1 静态库的概念

在我们的应用中,有一些公共代码是需要反复使用,于是就把这些代码编译为‘库’文件;在链接步骤中,链接器将从库文件取得所需的代码,复制到生成的可执行文件中。
这种库称为静态库,静态库的特点是:可执行文件包含了库代码的一份完整拷贝,缺点:被多次使用于是有多份冗余拷贝。

静态库在程序的链接阶段被复制到程序中,程序运行时和静态库没有关系。

9.2.2 静态库的生成

比如我们有一个关于stack的4个.c文件:stack.c、push.c、pop.c、is_empty.c
首先把它们编译成目标文件:

$ gcc -c stack.c push.c pop.c is_empty.c 

然后将所有.o文件打包生成静态库libstack.a:

$ ar rs libstack.a stack.o push.o pop.o is is_empty.o

ar: creating libstack.a
库文件都是以lib开头的,静态库以.a作为后缀,表示Archive。

9.2.3 静态库的链接

还是那个关于stack的例子,我们有个main.c要用到libstack.a,假如main.c就放在和libstack.a同一个文件夹里
这就需要把main.c和libstack.a编译链接在一起:

$ gcc main.c -L. lstack -o main

-L选项告诉我们要到程序运行时和静态库没有关系哪里去找需要的库文件,-lstack选项告诉编译器要链接libstack库。