设备编译时的Apple Mach-O Linker错误


238

我刚刚升级到xcode 4.0,无法再部署到iPhone,但遇到Apple Mach-O Linker Error,但它仍然适用于模拟器。

    Ld /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Intermediates/iParcel.build/Debug-iphoneos/iParcel.build/Objects-normal/armv7/iParcel normal armv7
    cd /Users/yveswheeler/iParcel
    setenv IPHONEOS_DEPLOYMENT_TARGET 3.2
    setenv PATH "/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin:/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin"
    /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/g++-4.2 -arch armv7 -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk -L/Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos -F/Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos -filelist /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Intermediates/iParcel.build/Debug-iphoneos/iParcel.build/Objects-normal/armv7/iParcel.LinkFileList -dead_strip -all_load -ObjC -lxml2 -miphoneos-version-min=3.2 -framework UIKit -framework CoreGraphics -framework QuartzCore /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos/libThree20.a /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos/libThree20Core.a /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos/libThree20Network.a /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos/libThree20Style.a /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos/libThree20UI.a /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos/libThree20UICommon.a /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos/libThree20UINavigator.a -framework AddressBook -lz.1.2.3 -framework Foundation -framework CFNetwork -framework MobileCoreServices -framework SystemConfiguration -framework MessageUI -framework AudioToolbox -o /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Intermediates/iParcel.build/Debug-iphoneos/iParcel.build/Objects-normal/armv7/iParcel

arm-apple-darwin10-g++-4.2.1: /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos/libThree20.a: No such file or directory
arm-apple-darwin10-g++-4.2.1: /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos/libThree20Core.a: No such file or directory
arm-apple-darwin10-g++-4.2.1: /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos/libThree20Network.a: No such file or directory
arm-apple-darwin10-g++-4.2.1: /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos/libThree20Style.a: No such file or directory
arm-apple-darwin10-g++-4.2.1: /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos/libThree20UI.a: No such file or directory
arm-apple-darwin10-g++-4.2.1: /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos/libThree20UICommon.a: No such file or directory
arm-apple-darwin10-g++-4.2.1: /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos/libThree20UINavigator.a: No such file or directory
Command /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/g++-4.2 failed with exit code 1

38
有没有搞错?!一条错误消息有许多不同的问题。苹果干得好!
Iulian Onofrei 2014年

18
“错误:发生错误”会更有用:))
Aviram Netanel

查看链接器在错误发生之前发出的警告;它可能会导致更好/更具体的解决方案。
Pro Q

Answers:


216

这是永久的解决方案。通常,覆盖项目可能会导致此问题。请尝试此方法。

-UPDATE-lang错误-Mach-O Linker错误

在某些情况下,错误日志窗口会显示.xctest错误,以进行修复

->选择您的项目

->在此旁边(在“常规”选项卡之前)从下拉列表中选择您的projectTest文件

->有一个选项(例如ProjNameTests)

->在“主机应用程序”中,仅当项目显示自定义时,才从下拉列表中选择项目

完成!

在此处输入图片说明

旧方法已删除


4
如果我删除了框架搜索路径,但找不到头文件
Danpe

62
我想我不明白。我该怎么办…?
fabian 2015年

1
@fabian只需跳出并尝试其他解决方案即可:-)
Gajendra K Chauhan

4
救了我这个男人。坐在老板面前,必须向他展示我正在使用的应用程序,但出现此链接器错误。如果没有降落,我就走了:D
Saraz

2
主机应用程序在最后一步在哪里?
Kartiikeya,

195

我遇到了同样的问题,问题是我不小心将.m文件而不是.h导入了实现文件中-希望对您有所帮助


1
找不到错误!只需尝试每一个解决方案
AsifHabib 2014年

这是不正确的,我在一个新项目中尝试了同样的事情,但仍然遇到同样的错误。
Hemang 2015年

转到“项目设置和构建阶段”部分,确保在“复制捆绑资源”部分而不是“编译源”中没有.m文件。对我
有用的

找不到解决方案。我不知道该怎么办...
马库斯

你救了我的命。非常感谢!
以撒

73

刚遇到同样的问题。

解决方案(对我而言)=检查您的框架。

在我的情况下,我添加了与CoreData相关的类,但没有“ CoreData.framework”。添加它解决了MACH_O的抱怨。


6
当您再次链接最新的SDK版本中不存在的库时,也会发生这种情况。假设您链接到libz.1.2.3,而sdk包含1.2.5。检查您的框架是一个非常好的建议!谢谢但丁!
SlowTree 2012年

感谢SlowTree,保存建议解决了此链接器崩溃的问题。libz.1.2.3至libz.1.2.5;
汤姆·佩斯

2
Cocoapods libPods.a为我链接了两个文件(因此符号重复)。谢谢,但丁!
Nick Merrill 2014年

是。删除了.a文件,并再次从链接器添加。它的工作!
Balasubramanian

61

打开.xcworkspace文件而不是.xcodeproj。我重复打开.xcworkspace文件。您所有的错误都会消失。


1
哇,那一定是最疯狂的调试消息之一。从字面上我永远不会猜到这是基于所提供消息的原因。
约瑟夫·凯西

1
对我来说有用,因为.xcodeproj中没有包含一个外部库。与cocoapods有关
Sjoerd de Wit

这对我有用。就像@SjoerddeWit所说的-包含cocoapods必须打开.xcworkspace而不是.xcodeproj。
科迪·里士满

拯救了我的一天!+1
布鲁诺·蒙泰罗

我已经将一个统一项目导出到xcode,并且没有.xcworkspace文件
Ayush Malviya

36

回复:标题中概述的问题:

万一其他人错过了明显的东西...

在安装新版本的Xcode4并将现有文件拖到新项目中后,我遇到了此错误。我未能发现在“选择添加文件的选项:”对话框中未选中“添加到目标”复选框。在“目标”>“构建阶段”>“编译源”中纠正我的遗漏解决了该问题。


这个技巧对我有用。谢谢。我删除了所有编译目录并重建了项目。
Vivek Gyaneshwar

34

菜单>产品>清洁,这就是它起作用的原因。我不确定其他人。我添加了图片来显示。

在此处输入图片说明


1
太棒了 到目前为止,我能找到的最简单的解决方案。
Vincent van Leeuwen

29

异常错误。对我来说,我只是清理并重新启动了Xcode,问题就消失了。



24

这些答案都没有帮助我。然后,我尝试重新安装Cocoapods:

pod deintegrate

pod install

问题解决了!


我不确定与pods和xcode断开连接的位置在哪里,但通常很难确保pods文件将其放入derivedData文件夹。这似乎可以解决该问题。我希望我可以从这个答案开始
。.– Jacksonkr

20

问题在于,在XCode 4中,依赖项不像以前在XCode 3中那样采用主项目的体系结构设置。我必须仔细检查所有依赖项,以将它们设置为正确的体系结构。


2
谢谢!我被链接器的错误消息抱怨“找不到文件”而不是“找到文件,但是我不能使用它...”的事实所误导,并在xcode设置中徘徊以寻找库搜索路径。但这对我有用。并且,如果您遇到此问题,则此其他帖子也与之相关:stackoverflow.com/questions/2999844/three20-and-ios-4。另外,这个不错的摘要博客:amirnaor.com/?p=112
Rob Rob

13

我有相同的,并设法解决它。

在xcode 偏好设置中,位置标签将构建位置下的值更改为“ Place build products in locations specified by targets"


感谢Wolfert,尝试了一下,但是仍然有1250个Apple Mach-O Linker警告,并且没有任何进展。您是否还采取其他措施来解决此问题?欢呼声

谢谢沃尔夫特!你节省了我很多时间。
Sunil Targe 2013年

6
XCode 5.1
Hemang

13

我为此挣扎了一段时间,在我的情况下,它最终成为了名为FRAMEWORK_SEARCH_PATHS的搜索路径下的构建设置。选择“级别”按钮很有帮助,该按钮似乎可以比较我的项目,目标和“已解决”设置。我看到我的目标设置以某种方式取代了默认的“ $(继承)”,而被覆盖的值就是XCode“解析”了该设置。当我删除覆盖(在本例中为3.2 sdk)时,链接器错误消失了,就像最近出现的一些警告有关我调用post-4.0方法的任何类一样。

关于这些警告-在为最近的更改添加MessageUI框架之前,我从未见过。我怀疑但不确定,当我添加该框架时,XCode尝试通过将该覆盖添加到目标中来做一些聪明的事情。我在任何时候都没有明确地这样做。例如,警告是关于NSURL的URLByAppendingPathComponent方法的,直到sdk 4.0才出现。在添加MessageUI框架之前,我从未收到该警告。而且由于删除了替代项,因此不再获得它们。



8

在CordovaLib.xcodeproj->“构建设置”中将“仅构建活动体系结构”更改为“是”对我有用。较早的应用程序在模拟器上运行,但不在设备上运行。


7

您可能需要更新构建设置。

验证您的iOS目标版本和处理器体系结构,因为您可能没有带有XCode 4的旧SDK。

您可能会在构建设置上看到《 Missing SDK》。将其更改为任何适用的内容。


升级xcode时,这几乎是我要做的第一件事。这次不是问题。
CodeVomit


6

检查以确保您没有指定特定的框架搜索路径。如果您转到有关目标的信息,而只是删除框架搜索路径条目,则应使用指定部署版本的默认值。


5

我只是尝试创建一个category class文件,并得到这个奇怪的问题..最后...

创建导致问题的类别类的错误方法:

New File-> Cocoa Touch-> Objective-C class,然后我将文件的名称修改为Category Class,如 name ..(即,更改OriginalClass_CategoryName.h/mOriginalClass+CategoryName.h/m,还修改了文件中的内容)。

正确的方法:

New File-> Cocoa Touch-> Objective-C category,它将自动生成文件(OriginalClass+CategoryName.h/m)。

哦,我多么愚蠢!


5

如果使用的是CoreData,并且使用XCode为您的实体生成NSManagedObject子类,请确保仅为每个实体生成一个。

我的问题是,它为同一实体生成了多个NSManagedObject子类(并将它们放在不同的文件夹中)。

我只是删除了所有它们,并重新生成了NSManagedObject子类。


5

要添加到已解决此问题的怪异事物列表中...

我像这样在全局头文件中有一些const CGFloat变量

const NSInteger  globalInteger1 = 2;
const NSInteger  globalInteger2 = 3;

我删除这些的那一刻,一切都很好:)


1
我的WEIRD问题是在.pch或constants.h文件中,我已将常量声明为NSString * const kInitiaNotification = @“ kInitialNotification”; 一开始没有提到“静态”
Mazen Kasser 2014年

从更改NSString static *key = @"someKey"const NSString *key = @"someKey"
TonyTony 2014年


4

不确定是否相关,但是看到您正在运行一些three20库,您可能希望在其网站上查看此帖子:http ://three20.info/article/2011-03-10-Xcode4-Support


4

我有同样的问题,我解决了。就我而言,“架构”设置导致了问题。在我的项目文件的“构建设置”选项卡中,“体系结构”设置为armv6。我将其更改为Standard(armv7),进行清理和构建。然后成功了!


4

就我而言,问题在于在不同的目标下指定了不同的体系结构。我正在使用Standard(amrv7)的armv6,armv7和cocos2d构建我的应用程序目标。进入构建设置,并确保您的体系结构符合所有目标。


4

我解决这个问题太奇怪了!

转到目标 >构建阶段 > 与库链接二进制文件

删除所有框架,然后再次添加!

希望对你有帮助 !


非常糟糕的解决方案
SleepsOnNewspapers 2015年

这不可能回答……不是很合逻辑
LKM 2015年

我检查了错误消息,发现它是框架之一,因此我删除了该框架并再次添加了它,而不是所有框架,只是一个框架。
Oluwatobi Omotayo

4

对于Swift语言...

我收到此错误“ ld:文件太小(长度= 0)...。”

就我而言,我只是清理项目,然后重建它..

脚步:-

1)转到项目->清洁

2)转到项目->构建

希望这可以帮助..


为我工作。当我将设备从iPhone 6切换到iPhone 4S时发生。
2015年

也为我工作。非常感谢

4

这对我来说是个窍门:

1)产品> 清洁

2)Windows> 项目

3)选择您的项目,然后单击“ 删除派生数据

4)产品> 构建


3

一种可能性:在Xcode 4构建设置中启用“死代码剥离”。

另一可能性:可能是您为以前使用GCC的某些框架切换为使用LLVM。回到GCC(或LLVM GCC)可能会消除这些警告。


3

我错误地定义了一个与其他文件中现有常量同名的新常量,并且使用xCode 4.3.1对我造成了此错误。xCode没有抱怨,但编译器不喜欢它。


3

我可以通过编辑“库搜索路径”来解决此错误

它之所以首先出现是因为我已经移动了几个文件夹,最终给了我的构建设置两个不同的搜索路径,因为在链接库/框架时它们会自动添加到构建设置中,但不是始终删除。

因此,如果将链接的库/框架移动到其他目录并重新链接,则必须手动编辑搜索路径。

您可能可以通过在移动它之前删除库/框架来躲避它,但我尚未对此进行测试。

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.