iOS静态库和动态库的介绍与制作


描述:

存在形式:
静态库:. a  .framework
动态库:. dylib  .framework

区别:

静态库:链接时,静态库会被完整地复制到可执行文件中, 被多次使用就有多份冗余拷贝
动态库:链接时不复制,程序运行时由系统动态加载到内存,供程序调用, 系统只加载一次,多个程序共用,节省内存
(注意: 项目中如果使用了自制的动态库,原则上是不能被上传到AppStore!

制作大概过程

静态库:.a 制作过程

1.创建过程中,选择“Cocoa Touch Static Library”
2.在过程中添加需要包含的代码
3.选择需要暴露出来的.h文件,.m文件会自动编译到.a文件中(选择 targets-->Build Phase--->Copy Files)
4.分别选择真机/模拟器设备,进行 Command+B 编译,生产相应的.a文件(位于当前Products文件夹)
备注:
a.真机生成的的用于真机设备上,模拟器生成的只能用于模拟器设备上,如若真机模拟器都可适用,需将真机与模拟器生成的进行合成
b.编译前debug/release设置问题。debug(真机/模拟器)版本用于debug版本,Release(真机/模拟器)版本用于发布版本

5.合成,终端输入命令 lipo -create 真机.a路径 模拟器.a路径 -output xx.a
(xx.a 是生成后的.a文件)

使用方式:
直接拷贝出其生成的.a文件与其.h文件,如有资源,需将资源做成bundle资源包

查看.a文件是模拟器还是真机类型,可通过终端命令进行查看
lipo –info xx.a


静态库:.framework 制作过程
1.创建过程中,选择“Cocoa Touch Framework”
2.同<.a 制作过程 步骤2>
3.暴露需要的头文件(选择 targets-->Build Phase--->Headers(public))
4.设置生成framework为静态库配置,默认是动态库( 选择targets-->Build Settings--->Linking---->Mach-O Type 设置为Static Library
5.同<.a 制作过程 步骤4>
  此时需要合并为framework中可执行文件

回头看一看,突然发现现在制作.framework库好幸福,记得两年前Xcode模版工程里没有iOS framework工程,采用Mac项目模板中framework工程,然后各种蛋疼的修改配置。。。。

注意事项
1.静态库中如果包含Category,使用静态库的工程中将会报“方法找不到”的错误(unrecognized selector sent to instance)
解决方案
在使用静态库的工程中配置 Other Linker Flags为-ObjC

2.静态库所支持的架构
i386:模拟器4s-5
x86_64:模拟器 5s-7Plus
armv7: 真机4s
armv7s(armv7兼容armv7s):  真机5,真机5c
arm64: 真机5s-7Plus 

3.如何一次编译支持多个架构的的静态库?
 正常情况下, 需要选中每一个模拟器进行编译, 生成支持对应架构的静态库. 然后合并;为了解决这种繁琐问题,需进行设置 Build Settings -> Build Active Architecture Only -> NO

4.查看一个framework库中可执行文件xx库是否为动态库
控制台: file framework库中可执行文件xx
控制台输出信息,直接看末尾:
Mach-O 64-bit dynamically linked shared library x86_64 (dynamically,动态库)

current ar archive random library(静态库)

lipo 其他的一些使用明

分解合成库

如一库中有多个架构,现只要i386架构库
lipo -thin i386 xx -output xx

从合成库移除某个架构
如移除i386架构库
lipo -remove i386 xx -output xx
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值