关于静态库和动态库(基于linux)

库(Library)说白了就是一段编译好的二进制代码,里面包含可以供编程时直接使用的函数。

从链接的方式上分,库分为静态库和动态库。

一、区别

①静态库即静态链接库(Linux 下的 .a)。之所以叫做静态,是因为静态库在编译的时候(静态库中所有代码)会被直接拷贝一份,复制到目标程序里,这段代码在目标程序里就不会再改变了。 
静态库的好处很明显,编译完成之后,库文件实际上就没有作用了。目标程序没有外部依赖,直接就可以快速运行。当然其缺点也很明显,就是会使用目标程序的体积增大。 
②动态库即动态链接库(Linux 下的 .so)。与静态库相反,动态库在编译时并不会被拷贝到目标程序中,目标程序中只会存储指向动态库的引用只有在程序执行时, 那些需要的函数代码才被拷贝到内存中。等到程序运行时,动态库才会被真正加载进来。 
动态库的优点是,不需要拷贝到目标程序中,不会影响目标程序的体积,而且同一份库可以被多个程序使用(因为这个原因,动态库也被称作共享库)。同时,编译时才载入的特性,也可以让我们随时对库进行替换,而不需要重新编译代码。动态库带来的问题主要是,动态载入会带来一部分性能损失,使用动态库也会使得程序依赖于外部环境。如果环境缺少动态库或者库的版本不正确,就会导致程序无法运行(Linux 下喜闻乐见的 lib not found 错误)。 

总的来说静态库是牺牲了空间效率,换取了时间效率,共享库是牺牲了时间效率换取了空间效率

二、生成方式

静态库:
首先将源文件编译成目标文件:gcc –c a.c b.c
生成静态库:ar –rc libstatic.a a.o b.o

共享库:
同静态库一样编译成目标文件:gcc –c a.c b.c
生成共享库:gcc –fPIC –shared –o libshared.so a.o b.o

三、链接方法

静态库的链接方法:
gcc –o staticcode –L. –lstatic main.c –static(默认库在当前文件夹)

共享库的链接方法: 
gcc –o sharedcode  -L. –lshared main.c(默认库在当前文件夹)



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值