(三)静态/动态函数库设计

本文详细介绍了Linux环境下静态链接库与动态链接库的区别及应用。涵盖了库文件的存放位置、链接过程、优缺点以及如何创建这两种类型的库文件。

外部函数

Linux应用程序设计中需要的外部函数主要由 函数库和系统调用来提供。

两者区别

 

函数库分类 

函数库按照链接方式可分为

   v静态链接库(直接注入目标程序)            v动态链接库(程序启动时加载)

静态链接:  由链接器在链接时将库的内容加入到可执行程序中

动态链接:  连接器在链接时仅仅建立与所需库函数的之间的链接关系,在程序运行时才将所需资源调入可执行程

 

静态链接库 对比 动态函数库

函数库存放位置

Linux应用程序使用的主要函数库均存放于 /lib, /usr/lib目录下,

其中采用*.so.*方式 命名的是动态函数库,

而以*.a方式命令的是 静态函数库

静态链接-特点

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

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

静态链接的特点是:

优点:

    对运行环境的依赖性较小,具有较好的兼容性

缺点:

    生成的程序比较大,需要更多的系统资源,在装入内存时会消耗更多的时间

    库函数有了更新,必须重新编译应用程序

 

使用静态库-编译选项

1.Linux下进行链接时 默认是链接动态库

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

例: gcc -static test.c -o test

-lname:

GCC在链接时,默认只会链 接C函数库,而对于其他的函数库,则 需要使用-l选项来显示地指明需要链接。

例:gcc test.c –lmylib -o test

制作静态库

1. gcc –c mylib.c –o mylib.o

2. ar cqs libmylib.a mylib.o

3. 将制作好的libmylib.a 复制到/usr/lib

命名:libname .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  指明产生动态链接库。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值