首页 > 技术文章 > 动态库和静态库的区别

yxfBlogs 2015-11-08 13:15 原文

做为一个 ios 开发者或多或少的应该计算机的一些知识, mac 系统它是苹果公司对linux系统进一步优化产生的。

在做项目结束上传打包的时候出现了问题(我使用的 leadCloud 三方类库),不让我上传 AVOSLeadCloud 这个库,我就取搜索这个问题是什么原因,原来是静态库动态库的问题(当时我使用的是动态库)。好吧,不让我传,我就去改静态库不就好了,改掉以后,上传成功!

linux中就存在动态库和静态库之别!

好了,言归正传,那我们就来了解一下这个动态库和静态库有什么区别呢?

首先我们来看一下不同点

库从本质上来说是一种可执行代码的二进制格式,可以被载入内存中执行。库分静态库和动态库两种。 

1. 静态函数库

    这类库的名字一般是libxxx.a;利用静态函数库编译成的文件比较大,因为整个函数库的所有数据都会被整合进目标代码中,他的优点就显而易见了,即编译后的执行程序不需要外部的函数库支持,因为所有使用的函数都已经被编译进去了。当然这也会成为他的缺点,因为如果静态函数库改变了,那么你的程序必须重新编译。

总结一句话就是:使用静态库编译后的执行程序是不需要其他函数库支持的,但是当他改变时,那么你的程序也要改变!

2. 动态函数库

    这类库的名字一般是libxxx.so;相对于静态函数库,动态函数库在编译的时候 并没有被编译进目标代码中,你的程序执行到相关函数时才调用该函数库里的相应函数,因此动态函数库所产生的可执行文件比较小。由于函数库没有被整合进你的程序,而是程序运行时动态的申请并调用,所以程序的运行环境中必须提供相应的库。动态函数库的改变并不影响你的程序,所以动态函数库的升级比较方便。

一句话总结:你的执行程序用到此函数库时才会去调用它,但是你要把他引用到你的程序里面才行!

二、相同

都是由*.o目标文件生成

 

作为一个 IOS 开发者了解清楚动态库与静态库是非常有必要的。那么,我们就来看一下他们在 IOS开发中有什么区别呢?

ios 开发中 动态库 与静态库的区别

一个好的 APP 是需要一个团队共同协作来优化完成的,这样使用静态库的好处就可以显现出来了

好处:

1,模块化,分工合作

2,避免少量改动经常导致大量的重复编译连接

3,也可以重用,注意不是共享使用

当然动态库使用有也有许多的好处:

1,使用动态库,可以将最终可执行文件体积缩小

2,使用动态库,多个应用程序共享内存中得同一份库文件,节省资源

3,使用动态库,可以不重新编译连接可执行程序的前提下,更新动态库文件达到更新应用程序的目的。

 

所以说看到这里,我们应该明白为什么苹果公司不予许 IOS开发中使用动态库了,动态库其实就是一个共享的类库,但是我们知道现在的iPhone,iPodTouch,iPad上面的程序都是单进程的,也就是说在同一个时刻只有一个程序在运行,那么你写一个动态库干什么用?你要共享给谁呢?

从2可以看出,其实动态库应该叫共享库,那么从这个意义上来说,苹果禁止iOS开发中使用动态库就可以理解了:

因为在现在的iPhone,iPodTouch,iPad上面程序都是单进程的,也就是某一时刻只有一个进程在运行,那么你写个共享库。

 

那么问题由来了,你苹果为什么要禁止 IOS开发中不能使用动态库呢?

一,就是我上面说的一点。

二,就是目前苹果的AppStore不支持模块更新,无法更新某个单独文件(除非自己写一个更新机制:有自己的服务端放置最新动态库文件)

所以,现在还是使用静态库比较好!

 

该文中主要内容取自http://blog.163.com/gene_lu/blog/static/6402542120138181597392/ 

 

推荐阅读