您的位置:首页 > 其它

关于库文件的制作和区别

2016-07-07 11:38 260 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息