静态函数库与动态函数库的设计

函数库存放位置:

    linux应用程序使用的主要函数均放在/lib和/usr/lib目录下,其中采用*.so.*命名的是动态函数库,而以*.a方式命名的是静态函数库。

静态函数库的特点:

    * 程序所要用到的库函数代码在链接时全部被copy到程序中。

    * 导致的问题:如果有多个进程在内存中同时运行,并且使用了相同的函数库,那么就会有多份拷贝,造成了空间的浪费。

使用静态库-编译选项

1. linux下进行链接时,默认采用的是动态链接

gcc test.c -o test
readelf -d test
可以看到Shared library: [libc.so.6]为动态库

 

2. 如果需要使用静态库,需要加入编译选项 -static ,例如:

 gcc -static test.c -o test

RHEL6默认不提供静态函数库,因此需要手动安装

 rpm -ivh glibc-static-2.12-1.80.el6.i686.rpm 

制作静态库

1. gcc -c mylib.c -o mylib.o
2. ar cqs libmylib.a mylib.o
3. 复制libmylib.a到/usr/lib 


GCC在链接时,默认只会链接到C函数库,而对于其它的函数库,需要使用-l选项来显示的指明,例如:

gcc test.c -lmylib -o test    /*函数库为libmylib.a*/

制作动态库

1. gcc -c mylib.c -o mylib.o
2. gcc -shared -fPIC mylib.o -o libmylib.so
3. 将制作好的libmylib.so复制到/usr/lib下

-fPIC 使输出的对象模型是按照可重定位地址方式生成的

-shared指明产生动态链接库

-c只编译不链接

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值