iOS开发 - 引入三方静态库文件报错问题

集成三方框架的时候出现了些问题,查了查资料,了解下报错原因及解决方法,稍微总结下。

问题:

集成微信支付的时候崩溃
-[__NSArrayM enqueue:]: unrecognized selector sent to instance 0x174253050

原因:

在集成微信支付时,文件夹中包含一个.a文件。.a文件是一个静态库,链接器只会链接类的符号,并不会链接方法的符号。所以当调用[_NSArrayM enqueue:]方法时,链接器会从Foundation Framework中找到类符号定义并将该库链接进来,而enqueue方法是_NSArrayM扩展(category)的方法,编译器无法链接方法的符号,导致找不到该方法,所以报错。解决这个问题的方法关键就是把静态库中的相关文件都加在进来。

解决方法:

官方文档给的解决方法 方法:Target->Build Settings->Linking 下 Other Linker Flags 项添加-Objc -all_load

添加的字段作用:
-ObjC
:链接器会把 Objective-C 的类和分类的所有对象文件全部链接,全部链接后方法符号全部被链接进来,如果类库中只有category没有类的时候这些category还是加载不进来。变通方法就是加入-all_load或者-force_load。
-all_load:链接器把全部的对象文件都链接进来。
-force_load:链接器把你指定的静态链接库中的全部对象文件链接进来,后面要跟需要加载的静态库的路径。

另:

添加-ObjC -all_load字段后,微信支付运行不再报错,但是引用的其他第三方库运行时报错,两个库可能哪里有什么冲突之类,使用-force_load后解决了问题。用到什么就加载什么,这种感觉更好。

参考:
http://www.cnblogs.com/machao/p/5288460.html

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值