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

时间:2011-03-16 17:10:56

标签: objective-c iphone xcode xcode4

我刚刚升级到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

68 个答案:

答案 0 :(得分:214)

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

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

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

- >选择你的项目

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

- >有一个选项(如ProjNameTests)

- >在主机应用程序中,只有在显示自定义

时才从下拉列表中选择项目

DONE!

enter image description here

旧方法已删除

答案 1 :(得分:195)

我遇到了同样的问题,问题是我在实现文件中意外导入.m文件而非.h文件 - 希望有帮助

答案 2 :(得分:73)

刚遇到同样的问题。

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

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

答案 3 :(得分:57)

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

答案 4 :(得分:36)

回复:标题中列出的问题:

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

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

答案 5 :(得分:31)

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

enter image description here

答案 6 :(得分:29)

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

答案 7 :(得分:26)

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

答案 8 :(得分:20)

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

pod deintegrate

pod install

问题解决了!

答案 9 :(得分:20)

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

答案 10 :(得分:13)

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

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

答案 11 :(得分:13)

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

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

答案 12 :(得分:11)

我遇到了这个问题并导入QuartzCore修复了它。

答案 13 :(得分:8)

在CordovaLib.xcodeproj中将“仅构建活动架构”更改为“是” - > Build Settings为我做了诀窍。之前应用程序在模拟器上运行,但不在设备上运行。

答案 14 :(得分:7)

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

答案 15 :(得分:7)

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

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

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

答案 16 :(得分:6)

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

答案 17 :(得分: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)。

哦,我多么愚蠢!!

答案 18 :(得分:5)

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

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

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

答案 19 :(得分:5)

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

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

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

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

答案 20 :(得分:5)

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

,也会出现此问题

答案 21 :(得分:4)

对于Swift语言......

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

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

步骤: -

1)转到项目 - >清洁

2)转到项目 - >构建

希望这会有所帮助..

答案 22 :(得分:4)

这对我来说很有用:

转到

1)产品>的清洁

2)Windows&gt; <强>项目

3)选择您的项目并点击&#34; 删除&#34; 派生数据

4)产品&gt; <强>构建

答案 23 :(得分:4)

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

转到目标&gt;构建阶段&gt; 将二进制文件链接到库

删除所有框架并重新添加它们!

希望它适合你!

答案 24 :(得分:4)

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

答案 25 :(得分:4)

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

答案 26 :(得分:4)

不确定它是否相关,但是看到您运行了大约三个图书馆,您可能需要在他们的网站上查看此帖子:http://three20.info/article/2011-03-10-Xcode4-Support

答案 27 :(得分:3)

对我来说,它意外导入了一个实现“.m”文件而不是相应的标题“.h”文件。一旦我发现项目构建恢复正常。

答案 28 :(得分:3)

对我来说问题是我已经加载了两次相同的功能。从构建设置&gt;中删除-ObjC 关联&gt; 其他链接标记

答案 29 :(得分:3)

如果您使用相同的名称定义了NSObject,如:

NSObject *notUniqueObj;

即使在2个不同的文件中(如果你要在另一个文件中导入),它也会给你一个错误。为那些提供不同的名称。

答案 30 :(得分:3)

Code Signinig !!!

我也有这个问题 - &#34;链接器命令失败,退出代码为1(使用-v查看调用)&#34;

我的问题是我尝试在真实设备上运行该应用,但我忘记在构建设置 代码签名 部分>标签。

答案 31 :(得分:3)

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

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

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

你可以通过删除库/框架之前移除它,但我还没有测试过。

答案 32 :(得分:3)

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

答案 33 :(得分:3)

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

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

答案 34 :(得分:2)

我正在运行xcode 5。在我的情况下,我要改变我的“部署目标”。它以前设置为3.0,我将其更改为7.0。现在错误消息消失了。要更改“部署目标”, 按照步骤:

  • 转到“项目名称”(左上角)
  • 转到“目标”(屏幕中间)
  • 转到“常规”
  • “部署信息”
  • “部署目标”

将其更改为当前的iOS版本。 -Thanks。

答案 35 :(得分:2)

这个问题的解决方法很简单 只需转到项目安装目录并打开文件 扩展名为“ .xcworkspace”

那将解决问题。

答案 36 :(得分:2)

我无意中尝试编译64位模拟器,这与我的CocoaPods不一致

答案 37 :(得分:2)

我对同样问题的修复:在“Project”中添加“其他链接器标志”,而不是在“Targets”中添加。 所以,我把它移到了“目标”,它不应该在“项目”中。

答案 38 :(得分:2)

在我的情况下,我复制了一个类文件!通过使用Xcode右侧栏的底部搜索字段找到它,所以要解决它删除其中一个的引用

答案 39 :(得分:2)

对于我来说,在XCode 4.5.x中运行设备时,架构是错误的。

XCode 4.5不再支持armv6了,所以我的修复是:

我刚刚编辑了所有库中的所有目标(three20Core,three20Common等)和libThree20:在构建设置中,在“架构”和“有效架构”中仅选择了armv7和armv7

答案 40 :(得分:1)

我的问题是因为我没有在我的一个头文件中将变量定义为extern,而是在.c文件中重新声明。

答案 41 :(得分:1)

我不小心添加了UITableViewController的同一子类的两个副本。删除其中一组文件可以清除错误。

答案 42 :(得分:1)

如果您收到Mach-O链接器警告或错误“未找到目录选项”,请查找该目录的路径。如果缺少,请尝试下载最新版本的RestKit并手动放入该文件夹。

答案 43 :(得分:0)

我必须确保我的框架是使用选择的模拟器构建的,以便使用模拟器构建我的项目(我的项目当然是使用框架)。同样适合在我的iPhone上构建一切都必须同步不确定原因,但它解决了问题。

我希望这有助于某人。

答案 44 :(得分:0)

就我而言,Apple Mach-O Linker错误的原因是源代码文件(.m)包含在资源包目标中。

验证捆绑包中是否包含最近创建的.m文件:在项目导航器中选择文件,打开文件检查器并确保在Target Membership部分取消选择资源包复选框。

答案 45 :(得分:0)

在我的情况下,我包含.m文件,这就是为什么编译器显示此类错误。

您应检查不是.m文件“ Sometime i”的最新文件导入

答案 46 :(得分:0)

在我自己的情况下,我有一些键的重复声明。我使用extern关键字声明了一些NSString常量,并在两个不同的类文件中做了完全相同的事情。当我删除其中一个时,错误就消失了。

extern NSString *const CFDataStatusKey;
extern NSString *const CFDataErrorKey;
extern NSString *const CFDataReasonKey;
extern NSString *const CFDataChannelsKey;

这些在两个类的.h和.m文件中分别声明和初始化。删除副本解决了问题。希望这有帮助

答案 47 :(得分:0)

我的问题是在多个class.m文件中我创建了一个名为TAG的NS​​String,并且我已经将TAG的值设置为每个类的String名称(例如:NSString * TAG = HWGuiControl)。我这样做了,然后很容易在我的NSLog语句前面加上类的名称。 (我在Android中使用这个系统非常成功,非常适合2年后分析程序流程)。部署到设备,这一切都很好。但是当它创建一个Archive进行分发时,显然链接器无法与多个文件中出现的名为TAG的NS​​String竞争。将TAG的名称修改为HWGTAG等,就可以了。

答案 48 :(得分:0)

请转到您的工作区设置并进行以下更改:

Workspace Setting:
   Build System:
     Legacy BuilPer-User


 Per-User Workspace
  DerivedData:
    Workspace relative location



Build System 
    Use User Setting

答案 49 :(得分:0)

使用CocoaPod,首先安装然后打开工作区,而不是CocoaPod website中指定的项目。

$ pod install

$ open YOUR_PROJECT_NAME.xcworkspace

答案 50 :(得分:0)

如果您使用Xcode 7或更高版本,只需购买产品 - &gt;清洁。这对我有用。

答案 51 :(得分:0)

如果你使用XCode创建一个自定义的NSManagedObject类然后添加它并为自定义类生成一个新文件,有时候XCode不会覆盖你的旧类,你会遇到两个相同的文件,但是不同的目录。找到旧文件并将其删除。

问题可能是其他问题。

答案 52 :(得分:0)

我修改了它,修改了从Nothing到Executable的Build settings上的链接部分下的Mach-O Type。

答案 53 :(得分:0)

导入框架后我遇到了这个问题。在&#39; Build Phases&#39;下,框架的名称以红色突出显示。我再次添加了框架,问题解决了。

答案 54 :(得分:0)

请按照以下步骤解决此问题:

转到项目设置和构建选项卡。搜索 “其他链接标记”

双击Release and Change的链接器标志:

 ${TARGET_BUILD_DIR}/libCordova.a to ${BUILT_PRODUCTS_DIR}/libCordova.a

调试 执行相同的操作 再次 清除 构建 存档。

答案 55 :(得分:0)

我在xcode 4.6中导出FMDB模块时遇到了同样的问题。 后来我在我的文件列表中发现了一个导致此问题的fmdb.m. 我从项目中删除后工作正常

答案 56 :(得分:0)

在我的情况下,我只是将.h .m文件从一个文件夹移动到另一个文件夹,并且该文件夹不存在于后面。所以我首先在finder上创建文件夹,然后在finder上移动文件,然后添加该文件夹并删除已移动的文件的引用,从项目停止给我错误

答案 57 :(得分:0)

一分钟前我遇到了同样的问题。这引导我到这里,这没有任何帮助。但我弄清楚是什么问题并修复了它。问题是在我的头文件中我声明了一个名为trig_node [SIZE]的结构类的实例

我的标题......

struct TrigNode
{
    float msin;
    float mcos;
    float mtan;
}trig_node[SIZE];

在我的.cpp文件中,我有一个访问此实例并返回答案的函数。

float cos_table_(float deg)
{
    uint n = ((SIZE/DEGRE)*deg);
    return trig_node[n % DEGRE].mcos;
}

导致我的链接错误。 因此,为了解决这个问题,我将.cpp文件中的trig表类“trig_node [SIZE]”的实例放在了清除错误的位置。所以现在新修补程序看起来像这样

我的标题......

struct TrigNode
{
    float msin;
    float mcos;
    float mtan;
};

我的.cpp文件     trig_node [SIZE]

float cos_table_(float deg)
{
    uint n = ((SIZE/DEGRE)*deg);
    return trig_node[n % DEGRE].mcos;
}

答案 58 :(得分:0)

如果您导入了同一个库的两个不同版本,也会发生此错误,在这种情况下只删除旧版本并只保留一个版本,Magic将适合您。

答案 59 :(得分:0)

我只需使用main()方法处理文件,Xcode对此并不高兴。

答案 60 :(得分:0)

你能尝试Unity-Build设置 - 播放器设置 - SDK版本:设备SDK 而不是模拟器sdk

我有这样的错误并修复了它

答案 61 :(得分:0)

我遇到了这个问题,弄清楚我的XCODE项目中有两个引用。只需删除其他参考。希望这有帮助

答案 62 :(得分:0)

我有同样的问题,因为我将一些文件.h和.m拖到我的项目中,Xcode开始向我显示此错误 clang:错误:链接器命令失败,退出代码为1(使用-v查看运行时调用

后来我发现我已经有了.h&amp; .m在我的Xcode项目中的其他一些SubFolder下。所以我删除了Extra .h和.m,清理了我的项目及其现在的工作。

clang:错误:链接器命令失败,退出代码为1(使用-v查看调用)此错误有多种原因,这就是为什么这个问题有这么多答案。你只需要看看&amp;校验;你是什​​么情况。

答案 63 :(得分:0)

我认为最好的回应是调查文件导入,有些导入有问题。

示例: 包括#import&#34; file.m&#34; 要么 包括外部file.h

...

答案 64 :(得分:0)

我的具体错误是:

ld: entry point (_main) undefined. for architecture armv7

这应该是显而易见的,但这是因为main.m <{1}}下的Compile Sources未包含Build Phases

答案 65 :(得分:0)

当我收到此错误时,我想再分享一个原因:

我通过单击它改变了Project Navigator中的项目名称(在Xcode 6.1.1中),我的项目无法编译。我将项目名称改回旧名称,项目正在建设中。非常奇怪,但是我已经面对这个了。我希望这个信息帮助。

答案 66 :(得分:-1)

尝试清理项目,然后编译。

答案 67 :(得分:-1)

就我而言

我刚刚删除了armv7s和armv64并构建了它的作品。