-all_load链接器标志有什么作用?

Guy*_*aim 122 iphone linker gcc objective-c

在编译Objective-C代码时,我无法找到-all_load标志所做的任何事情.

我有一些问题上传二进制文件到Apple,他们说这是因为我没有使用这个标志,但我的代码编译甚至没有它.

有人可以帮助我吗?

谢谢

Sha*_*ziz 142

它可能与此技术说明有关https://developer.apple.com/library/content/qa/qa1490/_index.html

重要信息:对于64位和iPhone OS应用程序,存在一个链接器错误,该错误阻止-ObjC从仅包含类别而不包含类的静态库加载对象文件.解决方法是使用-all_load或-force_load标志.-all_load强制链接器从它看到的每个存档加载所有目标文件,即使那些没有Objective-C代码的存档也是如此.-force_load在Xcode 3.2及更高版本中可用.它允许更精细的谷物控制存档加载.每个-force_load选项后面必须跟一个存档路径,并且将加载该存档中的每个目标文件.

  • 不,因为类别存在于编译时,它们只是没有被链接到最终的二进制文件中.但由于Obj-C调度的动态特性,链接器不会将调用代码直接指向实现方法,因此它永远不会注意到它丢失了.然后在运行时,您将获得kaboom,就像您使用"-performSelector:"调用它一样 (18认同)
  • 只是想澄清技术说明:大多数时候你需要-ObjC链接器标志,而不是-all_load.-all_load建议在(我认为很少见)实例中,你有一个没有类的库,只有类别. (14认同)
  • 是的,这主要是用于iPhone的静态库.如果在没有此链接器标志的情况下编译它们,则类别不包含在构建的二进制文件中,并且使用这些静态库的任何应用程序在iPhone OS硬件上执行时都会出现运行时错误. (3认同)
  • 根据http://stackoverflow.com/a/2615407/62,这已经在XCode 4.2中得到修复,因此您不再需要-all_load或-force_load标志.你仍然需要-ObjC. (3认同)
  • 现在技术问答中甚至没有提到“-all_load”和“-force_load”。 (2认同)