【问题标题】:Xcode linker error: file too small for architecture x86_64Xcode 链接器错误:对于架构 x86_64,文件太小
【发布时间】:2012-12-11 15:00:53
【问题描述】:

我正在 Xcode 中开发一个应用程序。

当我尝试构建时,出现此错误:

ld: in /Users/theodore/Library/Developer/Xcode/DerivedData/Tower-bkpdifuqssebjdgurzmtirbxejnn/Build/Intermediates/Tower.build/Debug/Tower.build/Objects-normal/x86_64/TWRAppDelegate.o, file too small for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

有谁知道怎么回事?

【问题讨论】:

  • 尝试完全重建/清理。以前的构建可能已异常中止,导致TWRAppDelegate.o 文件损坏或大小为零。
  • 一点精确:你用 cmd+shift+k 来做,如果不起作用,进入派生数据文件夹并删除名为你的项目的文件夹。
  • @RamyAlZuhouri:不再需要自己去垃圾箱构建文件夹了。按住 Option 键,Clean 命令(位于产品菜单中)变为“Clean Build Folder...”,这将为您完成。
  • Martin Baulig 的建议解决了我的问题。谢谢!
  • @PeterK。它为我赢得了“好问题”银质徽章 :-)

标签: objective-c ios xcode macos cocoa


【解决方案1】:

要自动修复此问题,可以添加Build Script Phase。转到 Xcode -> 你的项目 -> 你的目标 -> 构建阶段 -> + -> 新的运行脚本阶段

将其重命名为 Xcode Link Fix 并将其移至 Compile Sources 阶段上方。将其粘贴到脚本正文中:

# Legacy build system
legacy_dir=`dirname "${LD_DEPENDENCY_INFO_FILE}"`
if [ -d "${legacy_dir}" ]; then
    find "${legacy_dir}" -size 0 | while read -d $'\n' file; do
        rm "$file"
    done
fi

# New build system
if [ -d "${OBJECT_FILE_DIR_normal}" ]; then
    find "${OBJECT_FILE_DIR_normal}" -size 0 | while read -d $'\n' file; do
        rm "$file"
    done
fi

此脚本检查大小为零的目标文件并将其删除,以便在下一步编译完成时成功。

如果您有很多应用目标,则需要为每个应用目标添加此脚本。

此脚本需要大约 0.1 秒的时间来运行,并让您免于重新构建完整的项目。

【讨论】:

  • 真是天才!需要在每个项目中都有。
【解决方案2】:

无需彻底清理缓存即可快速修复错误:

  1. 打开文件描述错误(如果出现此问题TWRAppDelegate
  2. cmd + A
  3. cmd + X
  4. 重建 - 失败
  5. cmd + V
  6. 重建 - 成功

【讨论】:

    【解决方案3】:

    只需在终端应用程序中运行 cmd 即可删除此文件:

    rm /Users/theodore/Library/Developer/Xcode/DerivedData/Tower-bkpdifuqssebjdgurzmtirbxejnn/Build/Intermediates/Tower.build/Debug/Tower.build/Objects-normal/x86_64/TWRAppDelegate.o

    【讨论】:

    • 我用同样的方法解决了这个问题,比在我的大项目上完全清理/构建要快得多。下次我将尝试 @Anton Plebanovich 的解决方案,这可能是自动化此修复的绝佳方式。
    【解决方案4】:

    我通常会在相关文件中添加一个空格(可以是任何字符),然后将其删除然后保存。 比干净的构建更容易和更快。

    【讨论】:

    • 您的回答为我节省了重建项目的 10 分钟!谢谢
    • 这个答案应该排在第一位!
    • 谢谢,好心的陌生人!这是正确的答案。清理构建文件夹是显而易见且多余的。
    【解决方案5】:

    您可以删除 TWRAppDelegate.o 文件并继续构建。复制错误消息中提到的完整路径并将其粘贴到终端中的“rm”命令后面。无需清理/重建、删除派生数据、从项目中添加/删除文件等。

    【讨论】:

      【解决方案6】:

      在我的情况下没有进行干净的重建,所以我解释了我是如何解决问题的:
      - 删除了对文件的引用(不要删除文件)
      - 再次将文件添加到项目中并运行

      【讨论】:

      • 投反对票需要解释,它对我有用,也适用于其他任何人
      【解决方案7】:

      rm -rf /Users/hostname/Library/Developer/Xcode/DerivedData

      【讨论】:

        【解决方案8】:

        窃取@martin-baulig 的答案:

        尝试完全重建/清理。以前的构建可能已异常中止,导致 TWRAppDelegate.o 文件损坏或大小为零。

        【讨论】:

        • 我的项目需要一段时间才能构建。如果您异常停止构建而不是所有内容,您可以只删除 1-4 个损坏的目标文件。
        • 更好地使用@grassyburrito的答案(只需在损坏的文件中添加空格或其他内容);清理构建文件夹是多余的,可能会浪费大量时间
        • @nrx 我倾向于同意,但我有几个文件被损坏的地方......直到几次尝试编译后我才知道。根据您的项目规模,Martin 的方法可能会更快。这个答案是在grassyburrito的两年前给出的:-)
        【解决方案9】:

        步骤 1. 转到:项目 > 构建设置 > 搜索路径

        步骤 2. 将“始终搜索用户路径”设置为是

        第 3 步。构建项目(您会收到警告,但项目会构建。)

        步骤 4. 将“始终搜索用户路径”设置回否并重新构建以消除警告

        【讨论】:

        • 可以为找到此答案的其他人添加此内容。从 Xcode 8.3 开始,“始终搜索用户路径”已被弃用,并且从文档中它还说“强烈建议禁用它”。 (即设置为 NO)
        【解决方案10】:

        由于构建一个干净的项目可能需要太长时间,因此对于那些有权访问缓存中损坏的文件的人来说,方法更短:

        • 删除文件(删除参考)
        • 构建项目
        • 重新插入文件
        • 构建项目

        完整版让您轻松找到文件:

        • 在 Xcode 项目导航器中查找文件
        • 右键单击文件并按“在查找器中显示”(在文件所在位置打开查找器)
        • 在 Xcode 中选择文件并按退格键,然后单击“删除引用”
        • 构建项目(它会失败但等待它完成)
        • 重新插入文件,方法是将文件从查找器拖到您刚刚删除的位置
        • 构建项目(现在应该可以工作)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-08-10
          • 1970-01-01
          • 2015-12-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多