iOS开发Linux与后台开发归档C/C++

动态库和静态库

2020-01-15  本文已影响0人  小_夭

1.什么是库?

库是程序代码的集合,是共享程序代码的一种方式

2.库的类型

根据源代码的公开情况,库可以分为2种类型:

3.什么时候使用库?

一种情况是某些代码需要给别人使用,但是我们不希望别人看到源码,就需要以库的形式进行封装,只暴露出头文件。
另外一种情况是,对于某些不会进行大的改动的代码,我们想减少编译的时间,就可以把它打包成库,因为库是已经编译好的二进制了,编译的时候只需要Link 一下,不会浪费编译时间。

4.动态库、静态库

Link的方式有两种:静态和动态。根据Link方式的不同,库可分为静态库和动态库。

4.1 静态库

4.2 动态库

5.什么是Framework?

Framework 实际上是一种打包方式,将库的二进制文件,头文件和有关的资源文件打包到一起,方便管理和分发,和静态库动态库的本质没有什么关系。

在 iOS 8 之前,iOS 平台不支持使用动态 Framework,开发者可以使用的 Framework 只有苹果自家的 UIKit.Framework,Foundation.Framework 等。因为 iOS 应用都是运行在沙盒当中,不同的程序之间不能共享代码,同时动态下载代码又是被苹果明令禁止的,没办法发挥出动态库的优势,实际上动态库也就没有存在的必要了。
由于上面提到的限制,开发者想要在 iOS 平台共享代码,唯一的选择就是打包成静态库 .a 文件,同时附上头文件。

iOS 8/Xcode 6 推出之后,iOS 平台添加了动态库的支持,同时 Xcode 6 也原生自带了 Framework 支持。

.a.framework的区别:

  1. .a是纯二进制文件,.a文件不能单独使用,至少要有.h文件配合
  2. .framework除了二进制文件外,还包含一些资源文件(头文件,plist等),由于自身包含了头文件,所以.framework可以单独使用。

6.iOS设备架构

模拟器型号 架构
iPhone4s-iPnone5 i386
iPhone5s-iPhone8 x86_64
真机型号 架构
iPhone3gs-iPhone4s armv7
iPhone5-iPhone5c armv7s
iPhone5s-iPhone8 arm64

PS:支持armv7的静态库可以在armv7s上正常运行。

7.查看静态库支持的架构

.a:lipo -info xxx.a
.framework:lipo -info xxxx
注:xxxx为framework中小白页,不是xxx.framework

上一篇下一篇

猜你喜欢

热点阅读