iOS 生成静态文件(以及一些错误)

本文介绍了在iOS开发中如何生成静态库(.a文件),包括选择目标平台、设置Build选项,以及解决编译错误。强调了在生成过程中必须将Build Active Architecture Only设置为NO,并解释了如何通过lipo命令检查静态库类型。同时,讨论了Other Linker Flags的设置,如-ObjC和-all_load的重要性。最后,详细说明了如何合并不同架构的.a文件,并列举了可能出现的错误及解决方案,如选择器未找到和重复符号问题。
摘要由CSDN通过智能技术生成

1.创建工程,系统自己会生成2个NSObject的类:可以随意添加或删除。

2.选择是生成模拟器的.a文件还是真机的.a文件

(1)模拟器.a文件配置如下


(2)真机配置如下:

注意:这里的Bulid Active Architecture Only必须设置为NO,因为设置为NO的话。。他会编译成支持多种arm的静态库;

具体可以使用终端命令查询:lipo -info /文件路径.....可以查看类型。如果产生了下面这样的错误说明你没设置为NO。

Undefined symbols for architecture armv7s:
  "_OBJC_CLASS_$_XXXX", referenced from:
      objc-class-ref in   xxxxx.a(xxxxx.o)
   ld: symbol(s) not found for architecture armv7s


3.在.a工程类需要将Other Linker Flags设置成-ObjC,在引入.a文件的工程需要将Other Linker Flags设置成-all_Load

-all_load就是会加载静态库文件中的所有成员,-ObjC就是会加载静态库文件中实现一个类或者分类的所有成员,-force_load(包的路径)就是会加载指定路径的静态库文件中的所有成员。所以对于使用runtime时候的反射调用的方法应该使用这三个中的一个进行link,以保证所有的类都可以加载到内存中供程序动态调用.

4.在类里面随便写个方法。然后RUN一下生成各自的.a文件

5.将2个.a文件合并成一个。

具体如下:

lipo -create SQY/iOS/iphoneos/libGamePlusAPI.a SQY/iOS/iphonesimulator/libGamePlusAPI.a  -output SQY/iOS/libGamePus.a

注意:上面的方法要注意空格,不然会失败。

6.将生成的.a和头文件导入工程里面,看是否可以调用头文件的方法:可以就是成功


错误总结:

1.*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '+[NSDictionary dictionaryWithJSONString:error:]: unrecognized selector sent to class 0x235e7ec'

unrecognized selector sent to class 0x235e7ec'

一般是由于没有添加-all_Load。导致无法引入类

2.duplicate symbols for architecture armv7

这是由于静态库里面包含的一些全局定量或者一些类与你工程里的一样的名字。一般来说添加公司或个人名字的前缀来区分。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值