【问题标题】:Xcode gives Apple Mach-O linker errorXcode 给出 Apple Mach-O 链接器错误
【发布时间】:2013-06-29 03:55:54
【问题描述】:

我刚刚编译了一个项目,Xcode 返回这两个错误,这似乎不是我的代码的错。我该如何解决?

Undefined symbols for architecture i386:
  "_vImageBoxConvolve_ARGB8888", referenced from:
      -[UIImage(Blur) boxblurImageWithBlur:] in UIImage+Blur.o
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)

【问题讨论】:

标签: ios objective-c linker-errors mach-o undefined-symbol


【解决方案1】:

Google 是您的朋友:其他人通过将 Accelerate 框架添加到他们的项目来解决此问题(这看起来确实像框架错误)。

https://github.com/rnystrom/RNBlurModalView/issues/5

确保您还包含 QuartzCore 框架,因为该库也需要它。

【讨论】:

  • 使用Accelerate框架不需要链接QuartzCore。
  • 我没说是。他使用的库 - RNBlurModalView - 需要 QuartzCore 和 Accelerate 才能运行。如果一个被排除在外,另一个被排除在外,那么很有可能,所以我将它作为注释添加到我的答案中。
【解决方案2】:

教男人(或女人)如何钓鱼:

通常,Mach-O 链接器错误意味着您没有在代码中包含您正在使用的函数的头文件。

最简单的方法是复制该函数或方法调用并使用 shift+command+O 粘贴到 Xcode 快速搜索中。这将搜索所有框架(和头文件),找到该函数或方法调用并向您显示其位置(在本例中为头文件):

在这种情况下,此调用属于 Accelerate 框架,因此在您的文件顶部,输入:

#import <Accelerate/Accelerate.h>

进行快速搜索时,您可能需要去掉前导下划线。也就是说,搜索vImageBoxConvolve_ARGB8888

希望对你有帮助

【讨论】:

  • 这不准确。这种性质的链接器错误最常见的原因是未能链接到提供您正在使用的符号的框架或库。如果您未能使用#include#import 必要的标头,则更有可能收到warning: implicit declaration of function 'vImageBoxConvolve_ARGB8888' is invalid in C99 的警告。添加缺少的#include#import 将解决编译器警告,但不会解决链接器错误。
  • 这是找出你缺少哪个框架的好方法
  • 我找不到丢失的库,请告诉我如何找出丢失的库。
【解决方案3】:

显然 vImageBoxConvolve_ARGB8888() 没有定义。查看 Accelerate 框架是否正确包含在项目中。

【讨论】:

    猜你喜欢
    • 2012-12-31
    • 2017-11-14
    • 1970-01-01
    • 1970-01-01
    • 2015-09-02
    • 2014-04-06
    • 2023-03-30
    • 1970-01-01
    相关资源
    最近更新 更多