Xcode 4.5.1中出现“文件未找到”、“链接器命令以退出码1失败”的错误。

36

我正在开发一个现有的iOS应用程序,我必须为该项目编写单元测试用例。它正在模拟器6.0中构建和运行。每当我尝试测试该项目时,它都会显示下面的错误消息。 我无法确定确切的错误。

id: file not found: /Users/Yuva/Library/Developer/Xcode/DerivedData/FlyApp-aexukpgtbathuadgxlnm/Build/Products/Debug-iphonesimulator/FlyApp.app/FlyApp
clag: error: linker command failed with exit code 1 (use -v to see invocation)

你能帮我解决这个链接错误并测试一下这个应用程序吗?

10个回答

90

解决步骤:

  1. 创建一个新的方案并取不同的名字
  2. 删除旧方案

  3. 添加新方案

问题来源:

我更改了产品名称并禁用了快照选项,然后突然出现了这个错误:

ld: 文件未找到:.././previousproductname.app/previousproductname

我尝试了以下步骤来解决问题,但都没有成功:

  1. 删除派生数据,重新启动Xcode。- 问题未解决。

  2. 按照此链接的步骤进行操作:http://twobitlabs.com/2011/06/adding-ocunit-to-an-existing-ios-project-with-xcode-4/ - 出现相同的错误,问题未解决。

  3. 最后,我更改了方案名称,删除了旧方案,然后添加了新方案,这样解决了我的问题。


35

我遇到了相同的错误消息。原来是我重命名了我的应用程序目标,并没有更新测试目标、构建设置和Bundle Loader设置为我的新应用程序名称。

有关此设置的更多详细信息,请参见在Xcode 4中向现有iOS项目添加单元测试,我查看了相同的步骤,并帮助我在Xcode 5中修复了我的项目。


1
这对我很有效。像我这样的新手要坚持从“项目设置”中找到“测试目标”。您将立即看到“链接”部分中错误的“捆绑加载器”路径,但这不是我的错误源,因为这些条目是指“ $(TEST_HOST)”。向下滚动到“测试”部分并修复“测试主机”条目,这将更新链接部分。 - Josh
2
FYI...它在您的测试目标的构建设置中可用,在链接部分下(Xcode 6.3.2)。 - Mihir Mehta

21

您肯定已经更改了产品名称。由于工作区名称与产品(应用程序)名称不匹配,因此会出现此错误。

您只需要按照图像中所述,在ProjectName-Tests目标的TEST HOST Build设置中将工作区名称替换为产品(应用程序)名称。要实现这一点,请选择ProjectName-Tests目标,选择Build Settings,搜索Test Host条款。

enter image description here

这是该错误的标准配置解决方案。

干杯!


总是我的荣幸 @ThomásC. :) - Kuldeep
当我在产品名称中添加一个空格时,就会发生这种情况。记住,你不仅必须更改一个名称,而且还要在同一路径下更改另一个名称,例如从FlyApp.app/FlyApp到abcd.app/abcd。 - Bruce
更新测试主机解决了我的问题。 - loomer
1
完美的解决方案! - JastinBall

18

删除你的项目方案,然后重新创建它(点击新图标或使用Xcode的自动创建)。这对我有效。


这对我有用,我的天啊,我一直在为修复它而苦恼。 - arnold
@haotang 你真是个救星...非常感谢...我尝试了很多解决方案,但除了这个以外都没有用...Ty :) - Nikhil Lihla
只有通过点击“加号”图标才能为我们工作,而不能使用自动创建。 - Crashalot

6

在xcode 6中,您需要:

  1. 进入产品文件夹
  2. 点击.xctext文件
  3. 在“TARGETS”中选择Tests
  4. 在Host Application中选择您的应用程序。
  5. 点击构建应用程序。

对我来说有效!


1

啊!这是一个非常令人沮丧的问题,突然从我的XCode 8.2中出现了。

在我的情况下,我需要从方案中移除我的测试目标,构建和运行主应用程序,然后将测试目标重新添加到“测试”部分。

似乎测试目标试图在尚未构建的Derived Data中找到它想要的东西。不尝试构建测试而运行应用程序允许准备先前缺失的派生数据。

......疯狂就是在XCode中做同样的事情两次并期望相同的结果: |


0

你的链接器正在查找以下文件:/Users/Yuva/Library/Developer/Xcode/DerivedData/FlyApp-aexukpgtbathuadgxlnm/Build/Products/Debug-iphonesimulator/FlyApp.app/FlyApp

你是否按照路径查看该文件是否存在?请注意,FlyApp.app可能是一个包,如果你从Finder中查看,则需要“查看包内容”。如果不存在,则可能是因为1)你需要先构建FlyApp.app,或者2)你的测试代码中有一些依赖于它存在的内容,这无法从你的问题中确定。


你好。我无法看到 /Users/Yuva/Library/,因为在 Yuva 文件夹内缺少 Library。我该怎么做才能解决这个问题?你能帮我吗?谢谢。 - Yuvaraj.M
由于某些原因,您编写的代码认为那里有一个文件。我知道有时候DerivedData文件夹会出现问题,也许查看Xcode的“偏好设置->位置”菜单项可以解决问题。 - Owen Hartnett
谢谢您的回复。现在我按照您的指南找到了Derived Data文件夹。里面有很多文件夹,包括Build、Index、info.plist、Logs、scm.plist和TextInex。我可以删除DerivedData文件夹中的这些文件吗?请帮帮我。谢谢。 - Yuvaraj.M
我尝试删除DerivedData文件夹中的所有项目并重新启动Mac。再次尝试“测试”应用程序时,它显示相同的错误。我不知道如何解决这个问题。你能帮我吗?谢谢。 - Yuvaraj.M
不是库文件夹丢失了,而是它被隐藏了...你需要通过终端打开Finder中的“显示隐藏文件”选项。 - Albert Renshaw
在Finder中选择“查看文件路径”或“路径栏”之类的选项,然后选择隐藏文件夹“library”,然后在底部路径栏中双击“*〜--> Library”。 - Albert Renshaw

0
答案在你的构建设置>库搜索路径条目中。确保没有列出完全限定的路径。用$SRCROOT习惯语装饰它们,并用双引号括起来。如果有任何转义反斜杠,请确保将其删除。

执行清理操作,然后再进行构建,你应该可以恢复业务。这似乎是Xcode 5.x的问题


0
创建一个新的 Scheme。Bundle ID / 目标名称 / 可执行文件 / 项目名称等都是略微不同的概念。如果更改其中一个(就像我所做的那样),旧的 Scheme 可能仍然被设置为查找旧值作为可执行文件的名称,而构建过程可能已经更新为不再构建该可执行文件。

-2
在Xcode 11中,选择Product -> Scheme -> 新建Scheme。
这对我有用。 图片

关于XCode 4.5的内容! - FortuneCookie
这是为那些使用最新版本Xcode的人提供帮助的页面。 - shyam_ssr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接