误加all_load引起的程序报错

一.为什么要加-all_load

在64位的mac系统和iOS系统下,链接器有一个bug,会导致只包含有类别的静态库无法使用-ObjC标志来加载文件。解决方法是使用-all_load或者-force_load标志。作用是加载静态库中的所有文件。不同的是-all_load是加载所有库。-force_load是必须指定具体的文件。

二.按照上述理解,那如果使用-ObjC,就一定要使用-all_load了。因为-all_load是用来解决bug的。那什么还会报错?

而且如果.a静态库中只有分类没有类的话这样也不行。这时候就要在添加了-ObjC的基础上再添加一行-all_load.
-all_load是专门处理-ObjC的一个bug的,用了-ObjC后,如果类库中只有category,没有类的话,这样category还是加载不进来。这时候再加入-all_load就是告诉链接器强制把所有的目标文件都加载进来。但是这样在导入多个.a文件的时候如果都这样做,可能会导致你的目标程序大小增大,而且往往容易引起一些冲突,而这些冲突往往你无法解决(常常出现在你链接的各种库中)。

三.该如何解决这个问题

比较好的解决办法就是在build settings的linker flags中添加两个:

  1. -force_load
  2. .a文件的路径(例如在上面SDK: $(SRCROOT)/lib/libbaidumapapi.a)
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 回忆是毒品 想多了会上瘾 就像我们怀念母亲的爱一样 在爱的怀抱中我们是那么的不知足 长大后却要用回忆来重温妈妈的爱...
    难得的得阅读 168评论 0 0
  • IDEA启动异常 错误代码: 解决办法: 在host文件里面新增配置:127.0.0.1 xxxx.local l...
    刘刘刘刘刘刘庆文阅读 6,944评论 0 0
  • 放假前,心里盘算着回来之后每天晚上泡图书馆,学英语看名著。只是回来之后没有实现。在深夜的时候会无助,感慨自...
    阿咘咘呀阅读 421评论 0 0
  • 一个人二十岁之前靠父母,二十岁之后就只能靠自己。靠自己,不只是要有生存的基本技能,更重要的是要有看透别人本事, 生...
    致敬现在的自已阅读 372评论 0 1