Xcode链接器错误:文件对于体系结构x86_64太小


88

我正在用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)

有人知道怎么了吗?


59
尝试完全重建/清洁。先前的版本可能已异常中止,从而使TWRAppDelegate.o文件损坏或大小为零。
马丁·鲍里格

5
稍微精确一点:您可以使用cmd + shift + k进行此操作,如果不起作用,请进入派生数据文件夹并删除名为项目的文件夹。
拉米·阿·祖瓦里

3
@RamyAlZuhouri:不再需要自己破坏构建文件夹。按住Option键,“清理”命令(位于“产品”菜单中)将更改为“清理构建文件夹…”,这将为您完成此操作。
彼得·霍西

马丁·鲍里格的建议解决了我的问题。谢谢!
tbodt 2012

2
@PeterK。它为我赢得了“尼斯问题”银牌:-)
tbodt

Answers:


186

偷@ martin-baulig的答案:

尝试完全重建/清洁。以前的版本可能已异常中止,从而使TWRAppDelegate.o文件损坏或大小为零。


7
最后!你应得的。
tbodt 2015年

谢谢!:-)好吧,@ martin-bailig在评论中的答案对我有所帮助,但最好在这里将其作为真实答案。
彼得·K。

2
我的项目需要一段时间才能构建。如果您异常停止构建,则可以删除仅损坏的1-4个目标文件,而不是全部删除。
Fernando Mazzon

20

我通常在有问题的文件中添加一个空格(可以是任何字符),然后将其删除然后保存。比干净的版本更容易,更快捷。


2
您的回答为我节省了重建项目的10分钟时间!谢谢
Accid Bright '18

8

要自动解决此问题,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秒的时间来运行,并且可以避免您进行全面的项目重建。


太好了!需要在每个项目中都有。
Nik Kov


5

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

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


1
我用相同的方法解决了它,比在大项目中进行完整的清理/构建要快得多。下次我将尝试@Anton Plebanovich的解决方案时,这可能是自动化此修复程序的绝佳方法。
罗曼诺


1

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

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

完整版本,因此您可以轻松找到文件:

  • 在Xcode项目导航器中查找文件
  • 右键单击文件,然后按“显示在查找器中”(在文件所在的位置打开查找器)
  • 在Xcode中选择文件,然后按Backspace键,然后单击“删除引用”
  • 生成项目(它将失败,但要等待其完成)
  • 通过将其从查找器中拖动到刚删除它的位置来重新插入文件
  • 构建项目(现在应该工作)

1

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


-1

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

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

步骤3.构建项目(您将收到警告,但该项目将构建。)

步骤4.将“始终搜索用户路径”设置回“否”,然后再次构建以消除警告


可以为找到此答案的其他人添加此内容。从Xcode 8.3开始,“始终搜索用户路径”已被弃用,并且从文档中还显示“强烈建议禁用它”。(即将其设置为“否”)
Groot

-1

对于我而言,没有进行彻底的重建,所以我解释了如何解决该问题:
-删除了对该文件的引用(不要删除该文件)
-再次将该文件添加到项目中并运行


否决票需要做出解释,它对我
David Santiago
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.