静态库知识小记

1.静态库简介

1.1.静态库的简介

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

1.2.库的分类

  (1)开源库:公开源代码,能看到具体实现

  (2)闭源库:不公开源代码,是经过编译后的二进制文件,看不到具体实现;其中包括:静态库和动态库

1.3.静态库的存在形式

  (1).a

  (2).framework

1.4.动态库的存在形式

  (1).dylib

  (2).framework

1.5.静态库和动态库的区别

  (1)静态库在链接时,会被完整的复制到可执行文件中,被多次使用,就有多份拷贝

  (2)动态库则不会复制,只有一份,程序运行时动态加载到内存;系统只加载一次,多个程序公用,节省内存;

  (3)!!!项目中如果使用到自己的动态库,不允许上架!!!,在iOS8开发了动态加载dylib的接口

1.6.静态库应用场景

  (1)保护自己的核心代码,例如,国内的企业,掌握有核心技术,同时又希望更多的程序员来使用其技术,如,百度地图、友盟等

  (2)将MRC的项目,打包成静态库,可以在ARC下直接使用,不需要转换

2.静态库的制作(.a)

2.1 生成静态库的步骤

  (1)创建生成.a静态库的项目,如下图

  (2)创建完后,如下图,添加一个log的方法

  (3)选择模拟器或者Generic iOS Device, command + B,编辑,编译成功后,按照如下图的方式,查看生成的.a文件:

查看include文件,可以看到tool.h的文件,此时,如果在项目中添加一个类:Caclulate,添加一个方法 + (void)sum:(int)a b:(int)b;

如果直接编辑,那么在include文件中,不会出现Caclulate.h这个文件;

处理方式如下:

把Caclulate这个.h文件添加进入

上图中Subpath可以清空,编译后,如下图,Caclulate.h就有了:

生成的.a和.h拖入需要的工程,直接使用即可。

需要注意的一个细节是:

(1)如果生成静态库时,模拟器选择5的时候,编译,生成静态库;将.a + .h拖入需要的工程中后,运行时选择iphonXR时,就会报如下的错:

  问题的原因是:

    模拟器支持静态库的架构是不一样的,4s-5 的架构是i386,5s-iphoneXR支持的x86_64的架构;

    真机支持静态库的架构如下,3gs-4s:armv7, 5/5c:armv7s(已弃用), 5s-iphoneXR: arm64;

  查看静态库支付的架构的方法:

    用终端,进入.a的文件夹,用lipo -info xxxx.a, 如下图:

猜你喜欢

转载自www.cnblogs.com/lyz0925/p/11721858.html