【问题标题】:"Apple Mach-O linker command failed with exit code 1"“Apple Mach-O 链接器命令失败,退出代码为 1”
【发布时间】:2012-04-06 06:12:21
【问题描述】:

我正在尝试实现 SVProgressHUD 活动指示器。我将这些类复制到我的项目中,并将以下代码添加到我的 appDelegate 中,但无法弄清楚它崩溃的原因。

我发现他们出现以下错误,但不知道在哪里修复它:

Undefined symbols for architecture i386:
"_OBJC_CLASS_$_SVProgressHUD", referenced from:
objc-class-ref in QuotesAppDelegate.o
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation) 

代码如下:

#import "SVProgressHUD.h"

@implementation QuotesAppDelegate


- (void)startLoading
{
    //call this in your app delegate instead of setting window.rootViewController to your main view controller
    //you can show a UIActivityIndiocatorView here or something if you like
    [SVProgressHUD show];
    [self performSelectorInBackground:@selector(loadInBackground) withObject:nil];
}

- (void)loadInBackground
{
    //do your loading here
    //this is in the background, so don't try to access any UI elements
    [self populateFromDatabase];

    [SVProgressHUD dismiss];

    [self performSelectorOnMainThread:@selector(finishedLoading) withObject:nil waitUntilDone:NO];
}

- (void)finishedLoading
{
    //back on the main thread now, it's safe to show your view controller
    [window addSubview:[navigationController view]];
    [window makeKeyAndVisible];
}


- (void)applicationDidFinishLaunching:(UIApplication *)application {

[self copyDatabaseIfNeeded];

    [self startLoading];

}

【问题讨论】:

  • 您还记得将 QuartzCore 框架添加到您的项目中吗?
  • 是的,添加了 QuartzCore 框架以及 CoreGraphics.framework

标签: iphone ios multithreading


【解决方案1】:

编辑

我提供的答案(请参阅我的原始答案)只能解决问题,但这不是正确的解决方案。有关正确的解决方案,请参阅 Jim 回答

听起来您的目标没有启用 SVProgressHUD.m。点击 它在左侧窗格的项目导航器中,然后查看 右侧窗格中的文件检查器以确保有一个勾号 到您正在构建的目标。

Parth Bhatt链接。

为了完整起见

经过一些实验,我发现当您在项目中拖放文件或目录时,Xcode (4.3.1) 会要求您选择正确的选项以将这些文件或目录添加到您的项目中。确保选中“添加到目标”选项。

如果您错过了检查该选项,则需要执行以下步骤:

  1. 选择您的项目名称
  2. 选择目标
  3. 选择构建阶段
  4. 在编译源部分添加 .m 类

我原来的答案

如果您将这些类拖到项目中,则可能是问题所在。

为避免该编译错误,请改用“将文件添加到 YourProjectName”。

假设您的桌面中有一个包含名为“SVProgressHUD”的 .h 和 .m 文件的目录。

现在你必须:

  1. 删除以前的文件(.h 和 .m)
  2. 在您的项目中单击鼠标右键
  3. 选择“SVProgressHUD”目录和“将文件添加到 YourProjectName”(选择以下复选框选项:目标复制项目...和文件夹为任何创建组。 ..)

希望对你有帮助。

【讨论】:

  • 谢谢你,就是这样。我从示例项目中拖动文件,当我删除它们然后通过 Xcode 添加它们时,它就像一个魅力。
  • 将类拖入项目和通过菜单添加文件是一回事。您描述的选项不能解决此问题。很可能您在第一次尝试时没有注意到您错误地留下了未勾选的目标,并在第二次更正了它。你描述的程序是一个红鲱鱼。您应该理解然后解决问题,而不是简单地删除并重新添加文件,直到正确为止。
  • @Jim 你是完全正确的。但是由于我今天早上使用了这个解决方法,所以我发布了一个对我有用的解决方案。是的,这只是一种解决方法,我不知道正确的解决方案。谢谢你的解释。
  • 这不是一种解决方法。如果您第二次启用目标,它只会解决问题,这是您没有提到的。它意外地解决了这个问题。有人可以按照你的指示十次以上,除非他们勾选目标,否则它不会解决问题。此外,您所说的大部分内容都是不正确的,您描述的选项可能会导致不良行为。这是货物崇拜,误导人们思考不真实的事情。
  • @Jim 为了完整起见,我对我的问题进行了编辑。
【解决方案2】:

听起来SVProgressHUD.m 没有为您的目标启用。在左侧窗格的项目导航器中单击它,然后查看右侧窗格中的文件检查器以确保您正在构建的目标旁边有一个勾号。

【讨论】:

    【解决方案3】:

    查看此链接。请参阅此链接中接受的答案:

    Undefined symbols for architecture i386: _OBJC_CLASS_$_SKPSMTPMessage", referenced from: error

    如果仍然没有帮助,请参阅上述链接中 Allen Pike 的回答。尝试在您的应用中删除并添加回 QuartzCore 框架。

    希望对你有所帮助。

    【讨论】:

      【解决方案4】:
      1. 检查您是否有任何之前可以在不知情的情况下删除的对象
      2. 检查所有对象是否已连接,例如,如果您有一个 MapView 但没有连接,它会崩溃
      3. 如果这不起作用,请尝试清理应用程序,或者只是重新启动您的 iPhone 和 Xcode

      【讨论】:

        【解决方案5】:

        我通过在 Unity 编辑器中更改播放器设置解决了这个问题。

        菜单路径: PlayerSettings > OtherSettings > Scripting Backend 从 Mono2x 更改为 IL2CPP。

        第二个变化是将架构改为通用。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-10-21
          • 1970-01-01
          • 1970-01-01
          • 2016-04-13
          • 1970-01-01
          • 2012-09-17
          • 1970-01-01
          • 2017-10-14
          相关资源
          最近更新 更多