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

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

作者: 清风的小屋 | 来源:发表于2017-04-17 15:10 被阅读450次

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

    问题:

    集成微信支付的时候崩溃
    -[__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

    相关文章

      网友评论

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

          本文链接:https://www.haomeiwen.com/subject/lrytzttx.html