.a与.framework

一、库:
库是共享程序代码的方式,一般分为静态库和动态库

库的作用:1、一些不用经常动的代码,为减少编译时间,将其打成库,因为库是已经编译好的二进制文件,编译的时候只要link即可,不会浪费编译时间

Link分两种:动态 静态所以才有动态库和静态库

静态库:之所以叫做静态,是因为静态库在编译的时候会被直接拷贝一份,复制到目标程序里,这段代码在目标程序里就不会再改变了,静态库的好处很明显,编译完成之后,库文件实际上就没有作用了。目标程序没有外部依赖,直接就可以运行。当然其缺点也很明显,就是会使用目标程序的体积增大。

动态库: 与静态库相反,动态库在编译时并不会被拷贝到目标程序中,目标程序中只会存储指向动态库的引用。等到程序运行时,动态库才会被真正加载进来;优点:1、不需要拷贝到目标程序中,不会影响目标程序的体积,而且同一份库可以被多个程序使用(因为这个原因,动态库也被称作共享库)。2、编译时才载入的特性,也可以让我们随时对库进行替换,而不需要重新编译代码

缺点:动态载入会带来一部分性能损失,使用动态库也会使得程序依赖于外部环境。如果环境缺少动态库或者库的版本不正确,就会导致程序无法运行(Linux 下喜闻乐见的 lib not found 错误)

               2、想让其他人用代码,但又不愿意暴露源码

二、静态库与动态库的区别:
静态库:连接时完整地拷贝至可执行文件中,被多次使用就有多份冗余拷贝。
动态库:连接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序共用,节省内存。

三、iOS静态库形式和动态库形式:
静态库:.a和.framework
动态库:.dylib和.framework

四、framework静态库和动态库的区分:
系统的.framework是动态库,我们自己建立的.framework是静态库

五、.a和.framwork的区别:
.a是一个纯二进制文件,.framework中除了有二进制文件外还有资源文件。
.a文件不能直接使用,至少要有.h文件配合,.framework文件可以直接使用。
.a + .h + sourceFile = .framework

动态库与静态库区别:

window/unix/mac与ios平台独有

 是否在编译的时候发生行为:

对程序体积的影响

静态库

.lib / .a  /.framework

 会复制一份库到目标文件

变大

动态库

.dll / .dylib .tbd /.framework

 会存储指向动态库的引用

不影响

Framwork既可以是静态库也可以是动态库,那如何区分framework是静态库还是动态库呢?

File命令查看.framework的二进制文件,即可知道是静态库还是动态库

若包含 current ar archive是静态库;如果framwork里有动态库的明显后缀或有dynamically linked

猜你喜欢

转载自blog.csdn.net/denggun12345/article/details/83055053