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

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

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
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值