【问题标题】:Difference between -all_load and -ObjC-all_load 和 -ObjC 之间的区别
【发布时间】:2014-03-17 16:16:50
【问题描述】:

-all_load-ObjC 有何不同。在我的项目中,两者的行为方式相同。

【问题讨论】:

  • @Amar:请理解这个问题。我在问两个标志之间的区别。
  • 它们的区别在于一个错误,Midhun 在下面的答案中以及我已链接的问题的已接受答案中都提到了该错误。浏览该答案中提到的Apple technical note
  • 上一条评论中提到的 Apple 技术说明现在有它自己的修订历史记录,指出“删除了对 Xcode 4 及更高版本中不必要的变通办法的讨论。”并且没有讨论 -all_load 如果使用成为。

标签: ios iphone


【解决方案1】:

-Objc

此标志使链接器加载库中定义了 Objective-C 类或类别的每个目标文件。

-all_load

对于 64 位和 iPhone OS 应用程序,存在阻止 -ObjC 从仅包含类别且不包含类的静态库加载对象文件的链接器错误。解决方法是使用-all_load-force_load 标志。 -all_load 强制链接器从它看到的每个存档中加载所有目标文件,即使是那些没有 Objective-C 代码的文件

参考Building Objective-C static libraries with categories

【讨论】:

  • 你是对的,这两个标志都用于加载所有目标文件。但我不知道有什么区别。
  • @user1554347:区别在于For 64-bit and iPhone OS applications, there is a linker bug that prevents -ObjC from loading objects files from static libraries that contain only categories and no classes. The workaround is to use the -all_load。 AFAIK,没有其他区别。
  • 引用不再引用 -all_load,显然是因为需要 -all_load 的问题已经修复了一段时间。
【解决方案2】:

来自man ld ...

-all_load   Loads all members of static archive libraries.
-ObjC       Loads all members of static archive libraries that implement an Objective-C
              class or category.

-ObjC 不会像 -all_load 一样从所有静态库中提取所有符号。

【讨论】:

    猜你喜欢
    • 2022-01-12
    • 1970-01-01
    • 2021-12-25
    • 2020-05-10
    • 2014-09-20
    • 2010-10-28
    • 2015-10-04
    • 2012-08-12
    • 2011-02-18
    相关资源
    最近更新 更多