• 误加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

    by lm

  • 相关阅读:
    cocos2dx-lua UI编辑器的设计思路
    软件中Undo(撤回)和Redo(重做)的实现
    Cocos2d-x上适合做工具的UI库:ImGui
    静态成员
    命名空间
    类对象的初始化
    函数的重载、重写与隐藏
    类的继承关系与访问限定符
    多继承
    友元函数与友元类
  • 原文地址:https://www.cnblogs.com/widgetbox/p/9171576.html
Copyright © 2020-2023  润新知