未定义的符号为架构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:
- 去你的项目
- select你的目标
- 然后,去build立阶段
- 与库打开链接二进制文件
- 最后,只需添加+ 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.dylib
或libz.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"
有几件事要指出:
- 如果您收到错误消息,说明找不到“cocoa”,则您已将Mac文件夹/标头添加到您的iOS项目中 – 只需从您的项目中删除Mac组/文件,该警告就会消失
- 如果重命名Source文件夹(不是Xcode中的组),请在#import指令中使用该名称而不是“Source / GPUImage.h”。 因此,如果您在添加到项目之前将文件夹重命名为GPUImageFiles,请使用:#import“GPUImageFiles / GPUImage.h
- 显然,确保在有效体系结构列表中selectarm64以利用A7 64位处理器!
- 这不是一个GPUImage.framework包(例如,如果您从http://www.raywenderlich.com/60968/ios-7-blur-effects-gpuimage下载了该框架),因此可能无法正确使用GPUImage布拉德·拉森的意图,但它适用于我当前的SpriteKit项目。;
- 没有必要链接到框架/库等 – 只需导入标题和实现源文件夹如上所述
希望以上的帮助 – 尽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)
- 转到目标生成设置。
- 对于Debug和Release,都设置BUILD ACTIVE ARCHITECTURE ONLY = NO
- build立并运行
如果架构和链接器设置看起来不错,请检查您的h文件。 我的问题是同样的错误,但我已经重组了h文件,我删除了一个extern语句。 其他m文件正在使用该variables,导致链接器错误。
添加“Security.framework”为我做了诡计。
我知道这是一个老分支。 但是,在迁移到最新的CocoaPods版本(1.0.0)并尝试重新安装所有的pod之后,同样的问题开始发生在我身上。 我遇到了“缺lessarmv64符号”链接器错误。 奇怪的是,我通过执行以下步骤来解决它:
-
删除所有豆荚(pod init,pod install)
-
用相反的顺序重写podfile(而不是:pod“Mixpanel”,pod“Intercom”,我用的是pod“Intercom”,pod“Mixpanel”)
-
Pod安装
颠倒podfile中依赖关系的顺序并重buildpod解决了这个问题。
没有解决scheme解决了这个错误(Xcode 9),与TesseractOCRiOS
。 经过几个小时的反复试验,我想出了一个很好的解决scheme。 我只是在Podfile
删除'pod 'TesseractOCRiOS', '~> 4.0.0'
,运行pod install
。 然后,将pod 'TesseractOCRiOS', '~> 4.0.0'
回Podfile
并再次运行pod install
。
砰! 有用!