100

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

有谁知道出了什么问题?

4

10 回答 10

209

窃取@martin-baulig 的答案:

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

于 2015-04-29T19:13:58.993 回答
27

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

于 2017-03-03T15:04:44.347 回答
12

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 秒的时间来运行,并使您免于完整的项目重建。

于 2018-11-21T14:25:20.893 回答
9

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

于 2016-10-20T08:57:18.157 回答
6

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

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

于 2018-09-14T02:34:01.493 回答
3

无需完全清理缓存即可修复错误的快速方法:

  1. 打开错误描述的文件(如果出现此问题TWRAppDelegate
  2. 命令+一个
  3. 命令 + X
  4. 重建 - 失败
  5. 命令 + V
  6. 重建 - 成功
于 2019-03-20T13:19:18.153 回答
1

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

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

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

  • 在 Xcode 项目导航器中查找文件
  • 右键单击文件并按“在查找器中显示”(在文件所在的位置打开查找器)
  • 在 Xcode 中选择文件并按退格键,然后单击“删除引用”
  • 构建项目(它会失败但等待它完成)
  • 通过将文件从查找器拖动到您刚刚删除它的相同位置来重新插入文件
  • 构建项目(现在应该可以工作)
于 2016-06-29T11:18:08.093 回答
1

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

于 2018-06-04T20:29:39.120 回答
-1

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

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

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

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

于 2016-08-02T05:28:38.313 回答
-1

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

于 2016-12-05T22:15:46.763 回答