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

问题描述 投票:236回答:67

我刚刚升级到xcode 4.0,我无法再部署到iPhone,我得到Apple 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
objective-c iphone xcode xcode4
67个回答
215
投票

这是永久的解决方案。一般覆盖项目可能会导致这个问题。尝试这种方法。

-UPDATE - Clang错误 - Mach-O链接器错误

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

- >选择您的项目

- >除此之外(在General选项卡之前)从下拉列表中选择projectTest文件

- >有一个选项(如ProjNameTests)

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

DONE!

旧方法已删除


20
投票

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

pod deintegrate

pod install

问题解决了!


13
投票

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

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


13
投票

我挣扎了一段时间,在我的情况下,它最终成为搜索路径下的构建设置,称为FRAMEWORK_SEARCH_PATHS。它帮助我选择了“Levels”按钮,它似乎比较了我的项目,目标和“已解决”设置。我看到我的目标设置以某种方式覆盖了默认值“$(inherited)”,被覆盖的值是XCode“解析”设置的原因。当我删除覆盖时,在这种情况下指定了3.2 sdk,链接器错误消失了 - 最近出现了一些关于我调用4.0后方法的类的警告。

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


11
投票

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


8
投票

在CordovaLib.xcodeproj - > Build Settings中将“Build Active Architectures Only”更改为Yes是我的诀窍。之前应用程序在模拟器上运行,但不在设备上运行。


7
投票

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

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

您可能会在构建设置上看到“缺少SDK”。将其改为适用的任何内容。


7
投票

我有同样的问题:只是意外删除了.m文件,而.h在项目中。当我恢复.m文件时,问题就消失了。


6
投票

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


5
投票

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

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

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)。

哦,我多么愚蠢!!


5
投票

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

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

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


195
投票

我有同样的问题,问题是我在一个实现文件中意外导入.m文件而不是.h - 希望它有帮助


5
投票

要添加修复此问题的奇怪内容列表...

我在全局头文件中有一些const CGFloat变量,如此

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

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


5
投票

我有完全相同的问题,因为我在不同的类中有两个相同的常量。如果导入.m文件而不是.h文件,也可能会出现此问题


4
投票

不确定它是否相关,但是看到你正在运行一些三十二个库,你可能想在他们的网站上查看这篇文章:http://three20.info/article/2011-03-10-Xcode4-Support


4
投票

我有同样的问题,我解决了。就我而言,“架构”设置导致了问题。在我的项目文件Build Settings选项卡中,Architectures设置为armv6。我把它改为Standard(armv7),做清理和构建。然后它工作了!


4
投票

在我的情况下,问题是在不同的目标下指定了不同的架构。我用armv6,armv7和cocos2d用Standard(amrv7)构建我的应用程序目标。进入构建设置并确保您的架构同意所有目标。


4
投票

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

转到Target> Build Phases> Link Binary with libraries:

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

希望这对你有用 !


4
投票

对于Swift语言......

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

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

脚步:-

1)转到项目 - >清洁

2)转到项目 - >构建

希望这可以帮助..


4
投票

这对我来说很有用:

1)产品>清洁

2)Windows>项目

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

4)产品>构建


3
投票

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

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


3
投票

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


73
投票

刚遇到同样的问题。

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

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


3
投票

我能够通过编辑“库搜索路径”来修复此错误

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

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

您可以通过在移动它之前删除库/框架来避免这种情况,但我还没有测试过。


60
投票

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


36
投票

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

以防万一其他人错过了明显的......

安装新版本的Xcode4并将现有文件拖入新项目后,我遇到了这个错误。我没有发现在“选择添加文件的选项:”对话框中未选中“添加目标”复选框。纠正我在Targets> Build Phases> Compile Sources中的遗漏解决了这个问题。


32
投票

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


29
投票

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


26
投票

修复:构建设置>启用Bitcode>否enter image description here


20
投票

问题在于,在XCode 4中,依赖关系并不假设主项目的体系结构设置,就像之前在XCode 3中所做的那样。我必须遍历所有依赖项,为正确的体系结构设置它们。

© www.soinside.com 2019 - 2024. All rights reserved.