Xcode链接器错误:文件太小,不适用于架构x86_64

时间:2012-12-25 21:17:12

标签: objective-c ios xcode macos cocoa

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

有谁知道什么是错的?

9 个答案:

答案 0 :(得分:146)

窃取@ martin-baulig的回答:

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

答案 1 :(得分:9)

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

答案 2 :(得分:3)

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

答案 3 :(得分:1)

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

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

完整版,这样您就可以轻松找到该文件:

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

答案 4 :(得分:1)

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

答案 5 :(得分:1)

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

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

# Legacy build system
legacy_dir=`dirname "$LD_DEPENDENCY_INFO_FILE"`
find "$legacy_dir" -size 0 | while read -d $'\n' file; do
    rm "$file"
done

# New build system
find "$OBJECT_FILE_DIR_normal" -size 0 | while read -d $'\n' file; do
    rm "$file"
done

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

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

此脚本需要大约0.1秒的时间才能运行,并且可以避免您进行全面的项目重建。

答案 6 :(得分:0)

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

步骤2.设置"始终搜索用户路径"是的

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

步骤4.设置"始终搜索用户路径"返回否并再次构建以消除警告

答案 7 :(得分:0)

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

答案 8 :(得分:0)

无需完全清除缓存就可以纠正错误的快速方法:

  1. 打开文件描述错误(在出现问题TWRAppDelegate的情况下)
  2. cmd + A
  3. cmd + X
  4. 重建-失败
  5. cmd + V
  6. 重建-成功