Apple Mach-O Linker编译设备时出错

我刚刚升级到xcode 4.0,我不能再部署到iPhone,我得到一个苹果Mach-O链接器错误,但它仍然适用于模拟器。

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 

这是永久性的解决scheme。一般来说覆盖项目可能会导致这个问题。试试这个方法。

-UPDATE – 铛错误 – Mach-O链接器错误

在某些情况下错误日志窗口显示.xctest错误,以解决它

– >select你的项目

– >旁边(就在常规选项卡)从下拉列表中select您的projectTest文件

– >有一个选项(像ProjNameTests)

– >在主机应用程序中,只有显示自定义时,才从下拉列表中select您的项目

DONE!

在这里输入图像描述

旧方法已删除

我有同样的问题,问题是我偶然导入一个.m文件,而不是.h在一个实现文件 – 希望它可以帮助

刚刚遇到同样的问题。

解决scheme(对我来说)=检查你的框架。

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

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

以防万一谁错过了明显的…

在安装新版本的Xcode4并将现有文件拖入新项目后,我遇到了这个错误。 我没有发现“添加到目标”checkbox在“select添加文件的选项:”对话框中没有选中。 纠正我在目标>构build阶段>编译源中的遗漏解决了这个问题。

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

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

菜单>产品>清洁,这是它的工作原理。 我不确定其他人。 我添加了照片显示。

在这里输入图像描述

修复:生成设置>启用位码>否 在这里输入图像描述

问题是,在XCode 4中,依赖关系不像以前在XCode 3中那样假定主项目的体系结构设置。为了正确的体系结构,我必须通过所有的依赖关系来设置它们。

我有同样的设法解决它。

在xcode 首选项中,位置选项卡会将构build位置下的值更改为“ Place build products in locations specified by targets"

我苦苦挣扎了一小会儿,在我的情况下,它最终成为名为FRAMEWORK_SEARCH_PATHS的Search Paths下的Build Setting。 这有助于我select“级别”button,这似乎比较我的项目,目标和“已解决”设置。 我看到我的目标设置以某种方式取代了“$(inherited)”的默认值,被覆盖的值是XCode“parsing”设置的值。 当我删除覆盖,在这种情况下,指定3.2 SDK,链接器错误消失了 – 一些最近出现的警告,我所谓的后4.0方法的任何类。

关于这些警告 – 在我最近添加MessageUI框架之前,我从未见过它们。 我怀疑,但不知道,当我添加该框架时,XCode试图通过将重写添加到我的目标来做一些聪明的事情。 在任何时候我都没有明确地做。 例如,警告是关于NSURL的URLByAppendingPathComponent方法,直到sdk 4.0才出现。 在添加MessageUI框架之前,我从来没有得到这个警告。 而且由于我删除了覆盖,我不再得到它们。

我有这个问题,并导入QuartzCore修复它。

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

 pod deintegrate pod install 

问题解决了!

在CordovaLib.xcodeproj中修改“Build Active Architectures”为“Yes” – > Build Settings对我来说是个窍门。 早些时候,应用程序在模拟器上运行,但不在设备上运行。

您可能需要更新您的构build设置。

validationiOS目标版本和处理器体系结构,因为您可能没有使用XCode 4的旧SDK。

您可能会在构build设置上看到“丢失的SDK”。 将其改为适用。

我有同样的问题:只是不小心删除了一个.m文件,而.h在项目中。 当我恢复.m文件时,问题消失。

检查以确保您没有指定特定的框架searchpath。 如果您转到目标上的信息,只是删除框架searchpath条目,它应该使用您指定的部署版本的默认值。

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

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

我刚刚删除了所有这些,并重新生成NSManagedObject子类。

添加到修复这个问题的奇怪的东西的名单…

我在全局头文件中有一些const CGFloatvariables,像这样

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

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

我有完全相同的问题,因为我在不同的类中有两个相同的常量。 如果您导入.m文件不是.h文件,您也可以有这个问题

不知道是否相关,但看到你正在运行一些three20图书馆,你可能要检查他们的网站上的这篇文章: http ://three20.info/article/2011-03-10-Xcode4-Support

我有同样的问题,我解决了它。 在我的情况下,“架构”的设置造成了这个问题。 在我的项目文件Build Settings选项卡中,Architectures被设置为armv6。 我把它改为标准(armv7),做清洁和build立。 然后它的工作!

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

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

New File – > Cocoa Touch – > Objective-C class ,然后我修改文件的名称,以类别名称类似名称(即OriginalClass_CategoryName.h/mOriginalClass+CategoryName.h/m ,还修改了内容文件)。

正确的方法是:

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

哦,我是多么愚蠢!

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

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

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

删除所有的框架,并再次添加它们!

希望对你有帮助 !

对于Swift语言…

我得到这个错误“LD:文件太小(长度= 0)….”

在我的情况下,我只是清理项目,然后重build它..

脚步:-

1)转到项目 – >清洁

2)转到Project – > Build

希望这可以帮助..

这对我来说是一个骗术:

1)产品> 清洁

2)Windows> 项目

3)select您的项目,然后点击“ 删除导出的数据

4)产品> 构build

一种可能性:在Xcode 4构build设置中打开“死代码剥离”。

另一种可能性:可能是因为您以前使用GCC的某个框架转而使用LLVM。 回到GCC(或LLVM GCC)可能会摆脱这些警告。

我错误地定义了一个新的常量与另一个文件中的现有常量相同的名称,它使用xCode 4.3.1导致了这个错误。 xCode没有抱怨,但编译器不喜欢它。

我可以通过编辑“库searchpath”来修复这个错误

它首先出现,因为我已经移动了几个文件夹,最终给我的构build设置两个不同的searchpath,因为它们是链接库/框架时自动添加到您的构build设置,但他们不总是被删除。

因此,如果将链接的库/框架移动到不同的目录并重新链接它,则必须手动编辑searchpath。

在移动它之前,您可以通过移除库/框架来避开这个问题,但是我没有testing过。