未定义的符号为架构arm64

每次从CocoaPods导入文件时,我都会收到一个Apple Mach-O链接程序错误。

Undefined symbols for architecture arm64: "_OBJC_CLASS_$_FBSession", referenced from: someFile ld: symbol(s) not found for architecture arm64 

我得到了其中12个,我使用的各种豆荚。

我正在尝试使用XCode 5构buildiPhone 5S。

我一直在尝试各种解决scheme,但还没有得到任何工作。

我该如何解决这个苹果Mach-O链接器错误?


刚刚发现另一个可能有趣的警告,我希望这导致我的解决scheme:

 Ignoring file ~/Library/Developer/Xcode/DerivedData/SomeApp/Build/Products/Debug-iphoneos/libPods.a, 

file was built for archive which is not the architecture being linked (arm64):~/Library/Developer/Xcode/DerivedData/someApp/Build/Products/Debug-iphoneos/libPods.a

如果您的体系结构有效体系结构是正确的,那么您可以检查是否已经添加了$(inherited) ,这会将在pod中生成的链接器标记添加到其他链接器标记 ,如下所示: 在这里输入图像描述

问题在于cocoapods还没有为arm64架构而构build,因此在构build它们的时候它们不能被链接。 可能你不能使用这些软件包,直到他们更新和使用该架构。 你可以通过转到项目 – >目标(你的项目名称) – >build立设置并将体系结构更改为标准体系结构(armv7,armv7s)和有效体系结构到armv7,armv7s来修复链接器错误。

但请注意,这意味着您将无法获得64位处理器的全部function。 你说你正在build造5S,所以可能有一些原因你需要这个。 如果你出于某种原因绝对需要这种能力(也许你正在构build一个游戏),并且迫切需要这些文件,那么你可以提交一个pull请求,然后把这个项目重新编译为arm64,把这些字段设置为arm64开源项目。 但是,除非你真的需要这些文件是64位兼容的,现在看来似乎有点矫枉过正。

编辑:有些人也报告说,设置build立活动架构为YES也是必要的,以解决这个问题。

截至2014年4月28日,设置应该看起来像这样:

在这里输入图像描述

我通过设置来解决这个问题:

ARCHS = armv7 armv7s

VALID_ARCHS = armv6 armv7 armv7s arm64

体系结构设置为armv7 armv7s ,将主动体系结构仅设置NO ,用于项目中的每个目标,包括每个目标

我也遇到了同样的问题,上面的方法是行不通的。 我不小心删除了以下目录中的文件。

文件夹安置:

/用户/提供yourname /库/开发/的XCode / DerivedData

在这里输入图像描述

我遇到了相同/类似的问题,实现AVPictureInPictureController和问题是,我没有链接我的项目中的AVKit框架。

错误消息是:

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

解决scheme:

  1. 去你的项目
  2. select你的目标
  3. 然后,去build立阶段
  4. 与库打开链接二进制文件
  5. 最后,只需添加+ AVKit 框架 /任何其他框架

希望这可以帮助别人遇到类似的问题。

我通过检查右侧目标成员身份中选定的实现文件来修复我的问题。 这在处理扩展即自定义键盘时尤其有用。

目标会员

一些解释为什么build_active_architecture设置为NO。 Xcode现在会检测您连接的设备,并相应地设置活动架构。 因此,如果您将第二代iPod Touch插入计算机,Xcode应将活动体系结构设置为armv6。 用上面的Debugconfiguration构build你的目标现在只会构buildarmv6二进制文件来节省时间(除非你有一个巨大的项目,你可能没有注意到这个差异,但是我猜测随着时间的推移秒数会增加)。

当您创build发布到App Store的发布configuration时,应确保未设置此选项,以便构build胖通用二进制文件http://useyourloaf.com/blog/2010/04/21/xcode-build-active -architecture-only.html

在删除DerivedData – > Build – > Products – > Debug-iphoneos的内容后解决

我解决了这个问题,通过设置有效的archv到armv7 armv7s,并将build build活动体系结构设置为yes,然后从命令行执行新的“pod install”

鉴于一个iPhone 5s,还没有收到一个64位版本的第三方库,我不得不回到32位模式与最新的Xcode(5.1之前,它没有抱怨)。

我通过从有效体系结构列表中删除arm64,然后将Build Active Architecture Only设置为NO来解决这个问题。 在我看来,这比上面的其他方式更有意义。 我张贴的情况下,其他人不能得到任何上述解决scheme为他们工作。

升级到Xcode 5.1后,我遇到了同样的问题,并通过将架构设置为armv7 armv7s解决此问题

一直在这个问题上一整天都陷入困境。

我有多个Schemes,它正在编译的Demo,内部,发布 – 但是debugging计划只是不会编译,并抱怨libPods.a失踪。

解决scheme是转到项目 – >目标 – >生成设置,并将“仅生成活动架构”更改为YES。 清洁和build立! 最后几小时的头痒解决了!

设置目标的生成设置中的Other Linker Flags -ObjC解决了这个问题。

这可能与libz.dyliblibz.tbd ,只需将它添加到链接二进制文件的目标文件中,然后再次尝试编译。

下面的工作可以帮助我在64位模拟器和Retina iPad Mini的Xcode 5.1上无误地编译GPUImage, 而无需从有效体系结构列表中删除arm64(这违背了拥有64位设备进行testing的目的64位性能)。

从GitHub页面下载.zip文件夹: https : //github.com/BradLarson/GPUImage

解压缩,并导航到“框架”文件夹。 从这里,添加并复制'源'文件夹到您的Xcode项目。 确保“将项目复制到目标组的文件夹中”被勾选,并且“为所添加的文件夹创build组”也被勾选。 这将复制通用,iOS和Mac标头/实施文件到您的项目。

如果您不需要Mac文件,因为您正在编译iOS版本,则可以在将文件复制到项目之前删除Mac文件夹,或者直接从Xcode中删除该组。

将Source文件夹添加到项目后,只需使用以下内容即可开始使用GPUImage的类/方法:

 #import "Source/GPUImage.h" 

有几件事要指出:

希望以上的帮助 – 尽pipe问题被多次提出,似乎没有任何明确的指示,但不要害怕,GPUImage绝对适用于arm64架构!

在通过Podfile和pod install Pod之后,我发生了这个问题。 在尝试了一堆不同的修复程序之后,我最终手动导入了Pod(将必要的文件拖到我的项目中)并解决了这个问题。

由于morisunshine的答案指向正确的方向,他的回答稍微调整了我的问题解决了iOS8.2。感谢他。

我通过设置来解决这个问题:

 ARCHS = armv7 VALID_ARCHS = armv6 armv7 armv7s arm64 BUILD ACTIVE ARCHITECTURE ONLY= NO 

就我而言,我不得不寻找

C++ Standard Library ,并确保libc++是所选的一个。

这对我工作:

ios sdk 9.3

进入你的构build设置的app.xcodeproj有效架构:armv7 armv7s构build主动架构:没有

清理和build立,为我工作。

对我来说,我使用xcode 7.2中的opencv 2.4.9 for iOS,并且发生了上面的错误,我通过使用opencv而不是离线opencv框架来解决错误。

你可以尝试在下面添加opencv pod文本,如果你已经使用了,可以删除离线的opencv框架。

“OpenCV”,“2.4.9”

您只需从有效体系结构中删除arm64 ,并将NO设置为仅限Active Architecture 。 现在只需清理,构build和运行。 你不会再看到这个错误。

🙂 KP

这个解决scheme是唯一对我有效的方法:去CordovaLib设置,并将arm64添加到有效的体系结构。

在安装AWS框架以解决此问题之后,我面临同样的问题,我已经从安装AWS POD后创build的项目更新了PODconfiguration文件。 检查configuration文件如下

 OTHER_LDFLAGS = $(inherited) -ObjC -l"Pods-AWSAutoScaling" -l" Pods- AWSCloudWatch" -l"Pods-AWSCognito" -l"Pods-AWSCore" -l "Pods-AWSDynamoDB" -l"Pods-AWSEC2" -l"Pods-AWSElasticLoadBalancing" -l"Pods-AWSKinesis" -l"Pods-AWSLambda" -l"Pods-AWSMachineLearning" -l"Pods-AWSS3" -l"Pods-AWSSES" -l"Pods-AWSSNS" -l" Pods-AWSSQS"-l "Pods-AWSSimpleDB" -l"Pods-Bolts" -l"Pods-FMDB" -l"Pods-GZIP" -l"Pods-Mantle" -l"Pods-Reachability" -l"Pods-TMCache" -l"Pods-UICKeyChainStore" -l"Pods-XMLDictionary" -l"sqlite3" -l "z"-framework "Accelerate" -framework "AssetsLibrary" -framework "CoreLocation" -framework "Foundation" -framework "ImageIO" -framework "Security" -framework "SystemConfiguration" -framework "UIKit" -weak_framework "UIKit" OTHER_LIBTOOLFLAGS = $(OTHER_LDFLAGS) 

如果你的configuration文件工作不正常,那么把你的Other Linker标志设置为$(inheritance)

  1. 转到目标生成设置。
  2. 对于Debug和Release,都设置BUILD ACTIVE ARCHITECTURE ONLY = NO
  3. build立并运行

如果架构和链接器设置看起来不错,请检查您的h文件。 我的问题是同样的错误,但我已经重组了h文件,我删除了一个extern语句。 其他m文件正在使用该variables,导致链接器错误。

添加“Security.framework”为我做了诡计。

我知道这是一个老分支。 但是,在迁移到最新的CocoaPods版本(1.0.0)并尝试重新安装所有的pod之后,同样的问题开始发生在我身上。 我遇到了“缺lessarmv64符号”链接器错误。 奇怪的是,我通过执行以下步骤来解决它:

  1. 删除所有豆荚(pod init,pod install)

  2. 用相反的顺序重写podfile(而不是:pod“Mixpanel”,pod“Intercom”,我用的是pod“Intercom”,pod“Mixpanel”)

  3. Pod安装

颠倒podfile中依赖关系的顺序并重buildpod解决了这个问题。

没有解决scheme解决了这个错误(Xcode 9),与TesseractOCRiOS 。 经过几个小时的反复试验,我想出了一个很好的解决scheme。 我只是在Podfile删除'pod 'TesseractOCRiOS', '~> 4.0.0' ,运行pod install 。 然后,将pod 'TesseractOCRiOS', '~> 4.0.0'Podfile并再次运行pod install

砰! 有用!