gpt4 book ai didi

iOS armv7 : How to slice a (too) large object prior to linking

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:17:49 25 4
gpt4 key购买 nike

我有一个特别讨厌的 ld 问题:我正在生成一个大目标文件(一个“引导镜像”,仅限 armv7),稍后由 Xcode 项目使用。

boot-image.o 总是创建成功,不管它有多大。但是,在构建 Xcode 项目时,Xcode 后来失败了:

ld: Unable to insert branch island. No insertion point available. for architecture armv7

此时有几件事要提一下:

  • 我无法影响这个引导镜像文件的生成方式。这意味着我无法影响创建多个这些引导镜像。
  • 我知道这个错误来自哪里 [1]。当引导镜像大约超过 16 MB 标记时就会发生这种情况
  • 我正在考虑使用链接时间优化,但被告知对于这个启动镜像生成器来说这不是一个好主意(因为这个启动镜像生成器的作者试过了并且说 LTO 被证明是不可靠的)

考虑到上述情况,我认为我唯一的选择是以某种方式将我的 boot-image.o 分割成几个对象,然后再使用 Xcode 构建。但是如何呢?

[1] http://docs.unity3d.com/412/Documentation/Manual/TroubleShooting.html

最佳答案

我们刚刚在我们当前的一个 Unity 3D 项目中遇到了同样的问题。这似乎真的是唯一的选择,可以减小“太大”的 .o 文件的大小。

您可以尝试以下方法(对我们帮助很大):

  1. 去除调试符号(构建选项),因为调试符号可以大量增加 .o 文件。 https://developer.apple.com/library/ios/qa/qa1795/_index.html#//apple_ref/doc/uid/DTS40014195-CH1-BUILD_SETTINGS
  2. 将代码拆分到更多文件中(在 Unity 中,您可以将代码预编译到多个 dll 中,这些代码在 Xcode 构建阶段将以“.o 文件”结尾),也许您可​​以要求引导镜像生成器开发人员拆分他们的代码代码。
  3. 有关优化 (C#/Unity) 的更多具体提示,请参阅以下帖子,不知道这是否适用于您。 http://forum.unity3d.com/threads/unity-ios-linker-error-unable-to-insert-branch-island-no-insertion-point-available.239200/

根据架构/设置,限制似乎是 14MB 或 30MB。另见此处: http://www.opensource.apple.com/source/ld64/ld64-133.3/src/ld/passes/branch_island.cpp http://forum.unity3d.com/threads/unable-to-debug-on-device-ld-unable-to-insert-branch-island.148563/#post-1841860

关于iOS armv7 : How to slice a (too) large object prior to linking,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24971959/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com