iOS开发|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后解决了问题。用到什么就加载什么,这种感觉更好。
【iOS开发|iOS开发 - 引入三方静态库文件报错问题】参考:
http://www.cnblogs.com/machao/p/5288460.html
推荐阅读
- 深入理解Go之generate
- 2020-04-07vue中Axios的封装和API接口的管理
- 标签、语法规范、内联框架、超链接、CSS的编写位置、CSS语法、开发工具、块和内联、常用选择器、后代元素选择器、伪类、伪元素。
- iOS中的Block
- 记录iOS生成分享图片的一些问题,根据UIView生成固定尺寸的分享图片
- 2019-08-29|2019-08-29 iOS13适配那点事
- Hacking|Hacking with iOS: SwiftUI Edition - SnowSeeker 项目(一)
- iOS面试题--基础
- 我的软件测试开发工程师书单
- echart|echart 双轴图开发