根据链接时期的不同,库有静态库和动态库之分。静态库是在链接阶段被链接的,所以生成的可执行文件就不受库的影响,即使库被删除,程序依然可以成功运行。本文给大家示例说明一下gcc编译器如何编译和使用静态库。
一、静态库文件命名规范
静态库文件名的命名规范是以lib为前缀,紧接着跟静态库名,扩展名为.a。例如:我们将创建的静态库名为demo,则静态库文件名就是libdemo.a。执行:ar rcs libdemo.a demo.o,生成libdemo.a文件。
二、静态库的制作步骤
1、利用“gcc -c”将*.c源文件生成*.o文件
源文件结构如下:
[ycxie@fedora Demo]$ tree . ├── include │ └── common.h └── src ├── add.c ├── div.c ├── mul.c └── sub.c
[ycxie@fedora src]$ gcc -c *.c -I ../include [ycxie@fedora src]$ ll total 32 -rw-rw-r--. 1 ycxie ycxie 62 May 28 10:31 add.c -rw-rw-r--. 1 ycxie ycxie 1240 May 28 10:35 add.o -rw-rw-r--. 1 ycxie ycxie 62 May 28 10:31 div.c -rw-rw-r--. 1 ycxie ycxie 1240 May 28 10:35 div.o -rw-rw-r--. 1 ycxie ycxie 62 May 28 10:31 mul.c -rw-rw-r--. 1 ycxie ycxie 1240 May 28 10:35 mul.o -rw-rw-r--. 1 ycxie ycxie 62 May 28 10:31 sub.c -rw-rw-r--. 1 ycxie ycxie 1240 May 28 10:35 sub.o
2、使用ar命令将.o文件打包成静态库
[ycxie@fedora src]$ ar rcs libdemo.a *.o [ycxie@fedora src]$ ll total 40 -rw-rw-r--. 1 ycxie ycxie 62 May 28 10:31 add.c -rw-rw-r--. 1 ycxie ycxie 1240 May 28 10:35 add.o -rw-rw-r--. 1 ycxie ycxie 62 May 28 10:31 div.c -rw-rw-r--. 1 ycxie ycxie 1240 May 28 10:35 div.o -rw-rw-r--. 1 ycxie ycxie 5304 May 28 10:42 libdemo.a -rw-rw-r--. 1 ycxie ycxie 62 May 28 10:31 mul.c -rw-rw-r--. 1 ycxie ycxie 1240 May 28 10:35 mul.o -rw-rw-r--. 1 ycxie ycxie 62 May 28 10:31 sub.c -rw-rw-r--. 1 ycxie ycxie 1240 May 28 10:35 sub.o
三、静态库的使用方法
[ycxie@fedora Demo]$ mkdir lib [ycxie@fedora Demo]$ mv src/libdemo.a lib [ycxie@fedora Demo]$ cat main.c #include <stdio.h> #include <common.h> int main(void) { int i = 200, j = 10; int a, s, m, d; a = add(i, j); s = sub(i, j); m = mul(i, j); d = div(i, j); printf("%d + %d = %d\n", i, j, a); printf("%d - %d = %d\n", i, j, s); printf("%d * %d = %d\n", i, j, m); printf("%d / %d = %d\n", i, j, d); return 0; } [ycxie@fedora Demo]$ gcc main.c -o main -Iinclude -Llib -ldemo [ycxie@fedora Demo]$ ./main 200 + 10 = 210 200 - 10 = 190 200 * 10 = 2000 200 / 10 = 20