【问题标题】:Apple Mach-O Linker errors and I don't know what to doApple Mach-O Linker 错误,我不知道该怎么办
【发布时间】:2012-02-01 03:26:23
【问题描述】:

我不能再为设备或模拟器编译我的项目了。我收到 13 个 Apple Mach-O-Linker 错误。这一切都是在我尝试使用 sharekit 失败后开始的。以下是错误日志:

ld: warning: directory not found for option '-F/Users/bbrandy95/Documents/Broken Brandsonic Web Projects/Brandsonic Web mobile/../../Downloads/0.2.1gm1/iphoneos4.0/System/Library/Frameworks'
Undefined symbols for architecture armv7:
  "_OBJC_CLASS_$_NSURLRequest", referenced from:
      objc-class-ref in Brandsonic_Web_mobileAppDelegate.o
      objc-class-ref in Brandsonic_Web_mobileViewController.o
  "_OBJC_CLASS_$_NSAutoreleasePool", referenced from:
      objc-class-ref in main.o
  "_objc_msgSendSuper2", referenced from:
      -[Brandsonic_Web_mobileAppDelegate dealloc] in Brandsonic_Web_mobileAppDelegate.o
      -[Brandsonic_Web_mobileViewController didReceiveMemoryWarning] in Brandsonic_Web_mobileViewController.o
      -[Brandsonic_Web_mobileViewController dealloc] in Brandsonic_Web_mobileViewController.o
  "_objc_setProperty", referenced from:
      -[Brandsonic_Web_mobileAppDelegate setWindow:] in Brandsonic_Web_mobileAppDelegate.o
      -[Brandsonic_Web_mobileAppDelegate setViewController:] in Brandsonic_Web_mobileAppDelegate.o
  "__objc_empty_vtable", referenced from:
      _OBJC_CLASS_$_Brandsonic_Web_mobileAppDelegate in Brandsonic_Web_mobileAppDelegate.o
      _OBJC_METACLASS_$_Brandsonic_Web_mobileAppDelegate in Brandsonic_Web_mobileAppDelegate.o
      _OBJC_CLASS_$_Brandsonic_Web_mobileViewController in Brandsonic_Web_mobileViewController.o
      _OBJC_METACLASS_$_Brandsonic_Web_mobileViewController in Brandsonic_Web_mobileViewController.o
      _OBJC_METACLASS_$_SecondView in SecondView.o
      _OBJC_CLASS_$_SecondView in SecondView.o
  "_objc_msgSend", referenced from:
      _main in main.o
      -[Brandsonic_Web_mobileAppDelegate application:didFinishLaunchingWithOptions:] in Brandsonic_Web_mobileAppDelegate.o
      -[Brandsonic_Web_mobileAppDelegate dealloc] in Brandsonic_Web_mobileAppDelegate.o
      -[Brandsonic_Web_mobileAppDelegate GOOGLE] in Brandsonic_Web_mobileAppDelegate.o
      -[Brandsonic_Web_mobileAppDelegate YOUTUBE] in Brandsonic_Web_mobileAppDelegate.o
      -[Brandsonic_Web_mobileAppDelegate WIKI] in Brandsonic_Web_mobileAppDelegate.o
      -[Brandsonic_Web_mobileViewController webView:shouldStartLoadWithRequest:navigationType:] in Brandsonic_Web_mobileViewController.o
      ...
  "__objc_empty_cache", referenced from:
      _OBJC_CLASS_$_Brandsonic_Web_mobileAppDelegate in Brandsonic_Web_mobileAppDelegate.o
      _OBJC_METACLASS_$_Brandsonic_Web_mobileAppDelegate in Brandsonic_Web_mobileAppDelegate.o
      _OBJC_CLASS_$_Brandsonic_Web_mobileViewController in Brandsonic_Web_mobileViewController.o
      _OBJC_METACLASS_$_Brandsonic_Web_mobileViewController in Brandsonic_Web_mobileViewController.o
      _OBJC_METACLASS_$_SecondView in SecondView.o
      _OBJC_CLASS_$_SecondView in SecondView.o
  "_OBJC_CLASS_$_NSObject", referenced from:
      _OBJC_CLASS_$_Brandsonic_Web_mobileAppDelegate in Brandsonic_Web_mobileAppDelegate.o
  "___CFConstantStringClassReference", referenced from:
      CFString in Brandsonic_Web_mobileAppDelegate.o
      CFString in Brandsonic_Web_mobileAppDelegate.o
      CFString in Brandsonic_Web_mobileAppDelegate.o
      CFString in Brandsonic_Web_mobileViewController.o
      CFString in Brandsonic_Web_mobileViewController.o
      CFString in Brandsonic_Web_mobileViewController.o
      CFString in Brandsonic_Web_mobileViewController.o
      ...
  "_OBJC_CLASS_$_NSKeyedUnarchiver", referenced from:
      objc-class-ref in Brandsonic_Web_mobileViewController.o
  "_OBJC_CLASS_$_NSUserDefaults", referenced from:
      objc-class-ref in Brandsonic_Web_mobileViewController.o
  "_OBJC_CLASS_$_NSURL", referenced from:
      objc-class-ref in Brandsonic_Web_mobileAppDelegate.o
      objc-class-ref in Brandsonic_Web_mobileViewController.o
  "_OBJC_METACLASS_$_NSObject", referenced from:
      _OBJC_METACLASS_$_Brandsonic_Web_mobileAppDelegate in Brandsonic_Web_mobileAppDelegate.o
      _OBJC_METACLASS_$_Brandsonic_Web_mobileViewController in Brandsonic_Web_mobileViewController.o
      _OBJC_METACLASS_$_SecondView in SecondView.o
ld: symbol(s) not found for architecture armv7
clang: error: linker command failed with exit code 1 (use -v to see invocation)
'

我该如何解决这个问题?请帮忙。

【问题讨论】:

  • 您的项目是如何设置的?看起来您有两个主要问题,但您需要提供有关您的项目的更多信息。首先,你在使用某种破解库吗?这就是它的样子……您下载了 iOS SDK 并尝试直接链接到它。错误是因为它无法从非标准位置找到您使用的 iOS 4 SDK,因此无法链接 Foundation 库。如果您使用支持 iOS 5 的有效 Xcode 版本(Xcode 4.2.1),请删除旧的伪造框架,添加 Foundation 和 AppKit 并重新编译。
  • 谢谢!!原来我的项目中没有基础框架。我添加了它,现在我可以编译了!我仍然收到 2 个 Apple Mach-0 链接器错误,但至少我可以编译并且不必重写我的应用程序。谢谢 Jason Coco,如果没有您的建议,我永远不会考虑检查正确的框架。
  • 对于(可能不相关的)警告,请参阅:stackoverflow.com/questions/9458739/…

标签: ios xcode ios5 xcode4 mach-o


【解决方案1】:

对于每一个有类似错误的人。 如果发生这种情况,您通常可以删除点下的“路径”

目标->构建设置->库搜索路径

【讨论】:

  • 如果您正在使用像 Pixate 这样的框架,请尝试对框架搜索路径执行相同的操作(不理会$(inherited))。
  • 但是如果路径中没有任何项目怎么办?
  • 我有 17 个错误,并且都已使用上述方法删除,但是,仍然有一个错误。请告诉我该怎么做..
  • @crashbus:很好的答案
  • 在图书馆搜索路径上只留下 $(inherited) 对我有用 :) 谢谢!
【解决方案2】:

当框架被多次添加到项目中时,可能会发生此错误。

  • 您可以通过删除副本来解决此问题。要找到它,请在 Xcode 项目导航器中选择框架并选择 在 Finder 中显示。然后清理并构建您的项目。

如果您缺少框架头文件或对它们的引用,也可能会导致这种情况。

  • 在这种情况下,您应该尝试删除 SDK 或框架并重新添加。

祝你好运。

【讨论】:

  • 4 天后解决了我的问题! HUZZAH!
  • 这不是我的问题,而是列出了几个框架,其中缺少背后的实际框架(这些框架以红色文本显示)。我只需要删除那些框架并重建
  • 很高兴为您提供帮助:)
【解决方案3】:

如果您使用 CocoaPods 安装依赖项,请确保通过单击 .xcworkspace 文件打开您的 XCode 项目,而不是 .xcodeproj 文件。

【讨论】:

  • 是的。为我工作!我正在使用科尔多瓦。显然 Cordova 使用 CocoaPods。谢谢!
【解决方案4】:

项目文件似乎已被某种方式损坏。

解决此问题的最可靠方法是创建一个新项目,然后将文件和旧 info.plist 移到其上。

下一个最有可能解决此问题的方法是在您当前的项目中创建一个新目标,并查看它是否可以编译(如果您有旧目标中的任何特殊标志,您需要复制它们)。

您也可以尝试针对 Release 与 Build 进行编译,如果其中一个有效,请查看所有编译器选项,看看有什么不同。

如果您为 Sharekit 添加了标头搜索路径,也许可以尝试清除整个标头搜索路径,看看是否可以解决问题。还要确保您的项目仍然包含全新项目所包含的框架(UIKit 和 NSFoundation,可能还有其他)。

【讨论】:

    【解决方案5】:

    添加.m文件以编译源页面。

    步骤:-

    1. 在导航菜单中单击他的项目
    2. 选择目标
    3. 选择构建阶段
    4. 选择 + 按钮并将文件添加到编译源中。

    希望能帮助解决这个问题的人

    【讨论】:

      【解决方案6】:

      问题在于路径中的空格:

      xcode 对链接器使用以下开关:

      -F/Users/bbrandy95/Documents/Broken Brandsonic Web Projects/Brandsonic Web mobile/../../Downloads/0.2.1gm1/iphoneos4.0/System/Library/Frameworks
      

      因为它没有被引用,所以它不会起作用。 (它正在寻找文件夹"/Users/bbrandy95/Documents/Broken"

      您应该重命名目录,或查看项目设置并在目录中添加引号。 (但这可能很难找到)

      【讨论】:

      • 这不是报价的问题。完整路径作为“选项”的一部分是可见的,因此当它被传递给链接器时,它被正确地转义和/或引用。问题是他可能移动或删除了他的盗版 SDK。
      • 如何盗版可以免费下载的sdk?错误写在第一行......如果它包含空格,它应该是-F"path with spaces"
      • 我没有盗版我的 SDK。我再说一遍,我没有盗版我的 SDK。我从 Mac 应用商店购买并支付了 Xcode 4,当时雪豹的价格为 4.99 美元。然后,当我从 mac 应用商店购买 lion 时,我下载了 xcode 4.1 并在它发布时更新到 4.2。由于错误,我无法更新到 4.2.1。我必须伪造代码签名我的工作,因为我是一名越狱开发人员。我很生气,我会被指控这样做。
      • @JasonCoco 这不是真的。您始终可以免费下载 xcode 3.x sdk,但您没有获得配置,因此您只能在模拟器或越狱设备中使用它。 xcode 4 在应用商店中的下载价格为 4.99 美元。如果您想在设备上进行合法开发,您只需支付 99 美元
      • @JasonCoco 你错了。 en.wikipedia.org/wiki/IOS_SDK SDK 于 2008 年 3 月 6 日发布,允许开发人员为 iPhone 和 iPod Touch 制作应用程序,并在“iPhone 模拟器”中对其进行测试。但是,只有在支付 iOS 开发者计划费用(每年 99.00 美元)后,才能将应用程序加载到设备上
      【解决方案7】:

      我也有同样的问题,有 45 个相同类型的错误,当我将 libxml2.dylib 添加到我的项目中时,错误消失了。

      【讨论】:

        【解决方案8】:

        在某些情况下,您的库搜索路径为空。因为有很多 Apple-mac-o 链接器错误。

        请参阅我的回答。

        Apple Mach-O Linker Error using Core Data classes in OCUnit

        【讨论】:

          【解决方案9】:

          我遇到了这个问题,现在根据我的情况选择更新的 iOS 版本作为部署目标为我解决了这个问题。我的项目默认设置为部署到 iOS 5,然后将其更改为 7(最新)就可以了。

          对于 iOS 开发新手来说,这可以通过在导航器 > 部署信息 > 部署目标中单击您的 XCode 项目文件并从下拉菜单中选择适当的版本来完成。

          我怀疑这是否会解决其他人遇到的一些问题,但可能有几个人和我在同一条船上。

          【讨论】:

            【解决方案10】:

            这是因为项目在编译源中插入了核心数据的 xcdatamodeld 文件。选择您的项目 -> 构建阶段 -> 编译源并删除 projectName.xcdatamodeld 文件。 并检查您是否导入了.m 文件而不是.h 文件,它也会给出相同的链接器错误。检查所有#import 代码。 并检查您是否在库中添加了核心数据框架工作并导入了核心数据.h 文件。检查NSManagedObject 的创建并导入它的文件。 试试看,如果仍然有任何错误,请回复我。

            【讨论】:

              【解决方案11】:

              我遇到了同样的问题,

              我只是简单地将 Build Option -> Enable Bitcode 设置为 NO

              【讨论】:

                【解决方案12】:

                我自己开发的 cocoapod 遇到了这个问题。

                错误是:Apple Mach-O 链接器错误

                事实证明,我已经定义了一个协议并实现了一个协议扩展。协议扩展的一种方法是公开的,但协议本身不是。这导致了 Apple Mach-O Linker 错误。

                例子:

                protocol MyProtocol { var field: String { get} }

                extension MyProtocol { public func giveMeSomething() -> String }

                公共类 MyClass: MyProtocol {}

                在描述中提到的错误 MyClass referenced from MyProtocol -> MyProtocol referenced from giveMeSomething()...

                因此,解决方案是让 Myprotocolpublic

                希望对某人有所帮助。

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 2014-12-03
                  • 1970-01-01
                  • 1970-01-01
                  • 2017-06-22
                  • 2017-08-26
                  • 2016-02-05
                  • 2014-11-17
                  相关资源
                  最近更新 更多