美文网首页
误加all_load引起的程序报错

误加all_load引起的程序报错

作者: 丨十三叔丨 | 来源:发表于2018-06-12 09:34 被阅读0次

一.为什么要加-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)

相关文章

  • 误加all_load引起的程序报错

    一.为什么要加-all_load 在64位的mac系统和iOS系统下,链接器有一个bug,会导致只包含有类别的静态...

  • 疑难杂症

    杂症一、 -all_load跳坑 在项目集成qiyu(七鱼客服)后,发现编译报错: duplicate symbo...

  • Xcode 配置相关

    -ObjC 加载静态库所有OC文件-all_load 加载静态库所有文件-froce load "path" 加...

  • iOS other linker flags

    值:-objC,-all_load,-force_load -all_load : 在iOS 中,使用-all_l...

  • C语言学习征途二——小技巧

    VS2017使用scanf报错的解决方法 Q:VS2017使用scanf报错的解决方法。A:在程序最前面加:#pr...

  • 【ERROR】 org.springframework.secu

    读报错原因可以看出,是由于URL 地址不规范引起,仔细查看程序可以发现,是由于出现 //引起。修改办法 通过修改U...

  • [__NSCFDictionary setObject:forK

    使用NSMutableDictionary时,如果操作不当,有可能会引起程序崩溃。示例代码: 执行上述代码后报错:...

  • -all_load & -force_load 的区别

    1、使用 -all_load 选项,这会导致所有的类的方法都会被载入,不管“你的程序”有没有用到,所有的,包括系统...

  • 数字

    遇到一个程序在定义计数器时,counter = 0. 就试了下加不加点的区别 但是这个程序这么用会报错: Inde...

  • 数据库中的表导入csv文件时,出现此类报错如何解决

    报错类型: 第一种: 由于secure-file-priv引起的报错 第二种: 由于插入数据不同而引起的报错 解决...

网友评论

      本文标题:误加all_load引起的程序报错

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