1.静态库的制作
1.1静态库的命名
\qquad静态库一律使用lib打头,静态库名为:lib+静态库的名字+.a。比如:libmylibrary.a,这里面lib和.a是必须要有的。使用nm命令可以查看静态库。
nm 静态库名
1.2静态库的制作步骤
\qquad第一步:将.c文件生成.o文件,比如将hello.c转变为hello.o文件。
gcc -c hello.c -o hello.o
\qquad或者
gcc hello.c -c
\qquad第二步:使用ar将生成的.o文件打包
ar rcs 静态库的名字 生成的所有.o文件
1.3发布和使用静态库
gcc filename.c 静态库的路径/静态库名 -o 可执行文件名 -I 头文件的路径
\qquad或者
gcc filename.c -I 头文件路径 -L 静态库路径 -l 静态库名 -o 可执行文件名
2.静态库的优缺点
2.1静态库的优点
\qquad 1.发布的程序,即编译完成后的可执行文件,不再需要库函数。
\qquad 2.加载库的速度快
2.2静态库的缺点
\qquad 1.库被打包到应用程序中,导致应用程序体积变大。
\qquad 2.库如果发生了改变,需要重新编译。
3.静态库制作实例
- 源代码目录
zhaoxr@zhaoxr-ThinkPad-E450:~/linux$ tree
.
├── head
│ ├── add.h
│ └── mul.h
├── lib
│ ├── main.c
│ └── mul.c
└── source└── add.c3 directories, 5 files
- 生成静态库
这里的静态库不包含主函数的.c文件,只是把实现打包成静态库,
首先将功能模块的.c文件编译为.o文件,
zhaoxr@zhaoxr-ThinkPad-E450:~/linux/lib$ gcc -c add.c -o add.o
zhaoxr@zhaoxr-ThinkPad-E450:~/linux/lib$ gcc -c mul.c -o mul.o
zhaoxr@zhaoxr-ThinkPad-E450:~/linux/lib$ tree
.
├── add.c
├── add.o
├── mul.c
└── mul.o0 directories, 4 files
然后生成静态库
zhaoxr@zhaoxr-ThinkPad-E450:~/linux/lib$ ar rcs libmylib.a add.o mul.o
zhaoxr@zhaoxr-ThinkPad-E450:~/linux/lib$ tree
.
├── add.c
├── add.o
├── libmylib.a
├── mul.c
└── mul.o0 directories, 5 files
- 生成可执行文件
zhaoxr@zhaoxr-ThinkPad-E450:~/linux/source$ gcc main.c ../lib/libmylib.a -o app -I ../head/
zhaoxr@zhaoxr-ThinkPad-E450:~/linux$ tree
.
├── head
│ ├── add.h
│ └── mul.h
├── lib
│ ├── add.c
│ ├── add.o
│ ├── libmylib.a
│ ├── mul.c
│ └── mul.o
└── source├── app└── main.c3 directories, 9 files
zhaoxr@zhaoxr-ThinkPad-E450:~/linux/source$ ./app
a+b=19,a*b=90