静态库和动态库

库文件是预先编译好的方法的集合,一种可执行的二进制代码(但不可独立执行),可以被操作系统载入内存执行。Windowslinux二者的库的二进制是不兼容的。Windows系统静态库的扩展名为.lib,动态库扩展名为.dllLinux系统静态库的扩展名为.a,动态库的扩展名为.so

Linux中有两种库:静态库和动态库(共享库)。

静态库:

1. 特点:

程序在链接的过程当中,链接器从库文件中取得所需代码,复制到生成的可执行文件当中。因此,静态库是在程序的链接阶段被复制到程序当中,和程序的执行过程没有关系。

2. 创建:

Eg:有两个源文件main.cmax.c

1) gcc -c main.c max.c(得到main.omax.o)

2) ar crv libxxx.a main.o max.o(使用ar将目标文件归档,**libxxx.a即为我们所创建的静态库)

    3.使用ar命令查看某个静态库由哪些.o文件组成。

     Linux中的库


动态库:

   1.特点:

   动态库在链接阶段并没有被加载到程序当中去,在运行时被系统动态加载到内存中供程序使用。

   2.创建:

   Eg:有一个源文件 max.c

   a)  gcc  -fPIC - shared  -o  libxx.so  max.c

   上行代码等价于: gcc  -c -fPIC max.c

                    gcc  -shared -o libxx.so max.o(libxx.so就是我们要生成的动态库)

   3.当系统加载动态库文件时,不仅要知道程序所依赖的共享库的名字,还需要知道绝对路径,此时就需要系统动态

载入器

4.使用ldd命令可以查看一个可执行程序依赖哪些动态库或动态库又依赖于哪些动态库。

 Linux中的库


静态库和共享库的区别:

静态库的可执行文件当中包含了库代码的一份完整的拷贝,因此当它被多次使用时就会有多份没用的拷贝在内存当中,所以比较占内存;而动态库系统只需载入一次动态库,不同的程序可以得到内存当中相同的动态库的副本。因此会节省很多内存。

静态库和动态库同时存在时gccg++的程序,默认链接动态库

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值