Xcode出现了Apple Mach-O链接器错误

23

我刚编译完一个项目,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)

1
能否展示相关的代码? - Carl Norum
问题出在 UIImage+Blur.m 文件上。它正在寻找一个名为 vImageBoxConvolve_ARGB8888 的符号。您需要包含具有此符号的 .m(或.c)文件。 - rmaddy
看看这些链接,它们非常相似: https://dev59.com/p3zaa4cB1Zd3GeqPWfPzhttps://dev59.com/RnnZa4cB1Zd3GeqPolAD - user3817794
3个回答

40

教人捕鱼:

通常,Mach-O链接错误意味着您在代码中使用的函数缺少头文件。

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

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

#import <Accelerate/Accelerate.h>

在进行快速搜索时,您可能需要去掉前导下划线。换句话说,搜索 vImageBoxConvolve_ARGB8888。

希望这能帮到您。


21
这不准确。此类链接器错误最常见的原因是未能链接提供你所使用符号的框架或库。如果你未能#include或者#import必要的头文件,更有可能会得到警告信息,例如:warning: implicit declaration of function 'vImageBoxConvolve_ARGB8888' is invalid in C99。添加缺少的#include或者#import将解决编译器的警告问题,但却无法解决链接器错误。 - bdash
2
这是一个很好的方法,可以找出你缺失的框架。 - Pete
我找不到缺失的库,你能告诉我如何找出哪个库缺失了吗? - Anas Azeem

11

谷歌是你的朋友:有人通过向项目添加Accelerate框架来解决了这个问题(这确实看起来像一个框架错误)。

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

请确保也包含了QuartzCore框架,因为该库也需要该框架。


使用Accelerate框架并不需要链接QuartzCore。 - bdash
1
我并没有说它是。他正在使用的库 - RNBlurModalView - 需要QuartzCore和Accelerate两者才能正常运行。如果其中一个被省略了,那么另一个也很可能被省略,因此我在我的答案中添加了一个注释。 - Xono

1

显然vImageBoxConvolve_ARGB8888()未定义。请检查项目中是否正确包含了加速框架。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接