1、Linux系统的库函数
库函数是保存在库文件里面,看不到库文件定义的函数和使用,但是可以实现功能。
2、 库文件的分类
库文件分为动态库和静态库两种。
a. 静态库
后缀为.a ,在编译时将库文件的代码搬迁到可执行文件中。
b. 动态库
后缀为.so ,在执行的时候,才将需要的代码搬迁到可执行文件中。
所以执行静态库编译的程序的时候,不需要头文件的定义。而执行动态库编译的程序的时候,没有头文件的定义,则不能运行该程序!
[root@localhost 0706]# ls
0706_ add.c add.o include libadd.a libadd.so main main.c
其中libadd.a为静态库文件,libadd.so为动态库文件。
3、静态库与动态库的优缺点:
a. 静态库的可执行代码体积大,而动态库的可执行代码体积小。
b. 静态库的运行效率高,而动态库的运行效率低。
c. 静态库不易于升级,而动态库易于升级。
d. 静态库的编译效率低,而动态库的编译效率高。
e. 静态库的代码布局更好,而动态库的代码布局不好。
4、静态库文件的制作过程:
a. gcc -c add.c 生成add.o文件
[root@localhost 0707]# gcc -c add.c
[root@localhost 0707]# ls
add.c add.h add.o main.c
b. ar rcs libadd.a add.o 生成libadd.a文件
[root@localhost 0707]# ar rcs libadd.a add.o
[root@localhost 0707]# ls
add.c add.h add.o libadd.a main.c
c. gcc main.c -ladd -L 库文件位置(编译加入库文件)
[root@localhost 0707]# gcc main.c -ladd -L /home/07/0707/ -o add
[root@localhost 0707]# ls
add add.c add.h add.o libadd.a main.c
d. ./add(运行程序)
[root@localhost 0707]# ./add
sum = 9
5、动态库文件的制作过程:
a. gcc -shared -fPIC add.c -o libadd.so 生成libadd.so文件
[root@localhost 0707]# gcc -shared -fPIC add.c -o libadd.so
[root@localhost 0707]# ls
add add.c add.h add.o libadd.a libadd.so main.c
b. gcc main.c ./libadd.so -L 库文件位置 -o add(编译加入库文件)
[root@localhost 0707]# gcc main.c ./libadd.so -o add -L.
[root@localhost 0707]# ls
add add1 add.c add.h add.o libadd.a libadd.so main.c
c. ./add(运行程序)
[root@localhost 0707]# ./add
sum = 9