Linux应用开发--静态函数库和动态函数库

来源:互联网 发布:rmvb转mp4 mac版 编辑:程序博客网 时间:2024/05/22 02:20

什么叫库?就是一些函数经过一定的操作生成的可执行的二进制文件,能够被外部调用使用封装的函数。

Linux应用程序所使用的主要函数库均存放于/lib和/usr/lib目录下,其中以*.so方式命名的是动态函数库,以*.a命令的是静态函数库,linux下进行链接时默认使用动态函数库,如果想要使用静态函数库时使用-static编译选项即可,比如:gcc -static hello.c -o hello

一、静态函数库和动态函数库

1、在使用静态函数库时,我们需要的库都将会编译到程序当中,程序运行时就不再需要链接外部的函数库了。在应用程序中,静态函数库有多份函数库的拷贝,意思就是每使用一个静态函数库里的函数调用都会生成一个函数库的副本,这样就导致应用程序比较大,比较浪费空间。

2、动态函数库,又叫共享库,它使得可执行文件中不再需要包含公用的函数库,而只需在所有进程都可以引用的存储区中保存这种函数库的一个副本并没有编译进入程序本身,所以和静态函数库不一样,程序中只有一份函数库的拷贝,减少了程序空间,尤其是在一些通用的功能使用中,比如读写文件,但是增加了运行时间,增加的时间体现在第一次使用函数库时的开销。

二、函数库的制作

1、制作静态函数库

静态函数库的制作分为三步:

gcc -c Libname.c -o Libname.o

ar cqs libLibname.a Libname.o

将制作好的libLibname.a复制到/usr/lib中

2、制作动态链接库

gcc -c Libname.c -o Libname.o

gcc -shared  -fPIC Libname.o -o Libname.so

将制作好的函数库复制到/usr/lib中

特别说明:-fPIC使输出的对象模块是按照可重定位地址方式生成的。

        -shared指明产生动态链接库

3、如何使用:

gcc编译器在链接时默认只会链接C函数库,要想使用其他函数库时需要加入编译选项-l显示指明某个库需要链接

如:gcc  thread.c  -o  thread  -lpthread,线程函数需要链接线程库pthread


阅读全文
0 0