每次从CocoaPods导入文件时,我都会收到Apple Mach-O链接器错误 .
Undefined symbols for architecture arm64:
"_OBJC_CLASS_$_FBSession", referenced from: someFile
ld: symbol(s) not found for architecture arm64
对于我使用的各种Pod,我得到了大约12个 .
我正在尝试使用XCode 5为iPhone 5S构建 .
我一直在尝试使用SO的各种解决方案,但还没有任何解决方案 .
How do I fix this Apple Mach-O Linker Error?
刚发现另一个可能有趣的警告,我希望这能引导我找到解决方案:
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
30 回答
如果您的 Architectures 和 Valid Architectures 都没问题,您可以检查是否已将
$(inherited)
(将在pod中生成的链接器标志)添加到 Other Linker Flags ,如下所示:问题是cocoapods还没有为arm64架构而构建,因此在构建它们时无法链接它们 . 在更新并使用该架构之前,您可能无法使用这些软件包 . 您可以通过转到项目 - >目标(您的项目名称) - >构建设置并将架构更改为标准体系结构(armv7,armv7s)以及armv7,armv7s的有效体系结构来修复链接器错误 .
请注意,这意味着您无法获得64位处理器的全部功能 . 你说你正在建造5s,所以可能有一些原因你需要这个 . 如果你出于某种原因绝对需要这种能力(也许你正在构建一个游戏),并且迫切需要这些文件,你可以提交一个拉取请求,然后通过在你从中提取的文件中将那些相同的字段设置为arm64,将项目重新编译为arm64开源项目 . 但是,除非你真的需要这些文件是64位兼容的,否则现在看起来有点过分 .
编辑:有些人还报告说,将Build For Active Architectures设置为YES也是解决此问题的必要条件 .
截至2014-04-28,设置应如下所示:
我通过设置:解决了这个问题:
ARCHS = armv7 armv7s
VALID_ARCHS = armv6 armv7 armv7s arm64
我遇到了实现
AVPictureInPictureController
的相同/类似问题,问题是我没有在项目中链接 AVKit 框架 .错误消息是:
The Solution:
转到 Project
选择你的 Target
然后,转到 Build Phases
打开 Link Binary With Libraries
最后,只需添加 + AVKit framework /任何其他 framework .
希望这可以帮助其他人遇到类似的问题 .
我也遇到了同样的问题,上面的方法都行不通 . 我不小心删除了下面目录中的文件 .
文件夹安置:
〜/资源库/开发/ Xcode中/ DerivedData /
为项目中的每个目标设置 Architectures 为 armv7 armv7s , Build Active Architecture Only 为 NO ,包括 every one in Pods
我通过检查右侧目标成员资格中的选定实施文件来修复我的问题 . 这在处理扩展即自定义键盘时尤其有用 .
解释为什么build_active_architecture设置为NO . Xcode现在可以检测您已连接的设备,并相应地设置活动架构 . 因此,如果您将第二代iPod Touch插入计算机,Xcode应将活动架构设置为armv6 . 使用上面的Debug配置构建你的目标现在只会构建armv6二进制文件以节省时间(除非你有一个庞大的项目,你可能没有注意到差异,但我想随着时间的推移,秒数会增加) .
当您创建用于发布到App Store的分发配置时,您应该确保未设置此选项,以便您构建胖通用二进制文件http://useyourloaf.com/blog/2010/04/21/xcode-build-active-architecture-only.html
删除DerivedData - > Build - > Products - > Debug-iphoneos的内容后解决
您需要从 Valid Architecture 中删除 arm64 并将 NO 设置为 Active Architecture Only . 现在只需清理,构建和运行 . 您不会再次看到此错误 .
:) KP
我通过将有效的archs设置为armv7 armv7s并将构建活动体系结构设置为仅在发布中的YES然后从命令行执行新的“pod install”来解决它
鉴于iPhone 5s还没有收到64位版本的第三方库,我不得不使用最新的Xcode回到32位模式(5.1之前没有抱怨) .
我通过从Valid Architectures列表中删除arm64,然后将Build Active Architecture Only设置为NO来修复此问题 . 在我看来,这更有意义比如上所示的其他方式 . 我发帖以防其他人无法获得上述任何解决方案 .
升级到Xcode 5.1后我遇到了同样的问题并通过将 Architectures 设置为 armv7 armv7s 来修复它
一整天都被困在这个问题上 .
我有多个Schemes,它正在编译Demo,Internal,Release - 但是Debug方案只是不能编译并且抱怨libPods.a缺失 .
解决方案是转到Project - > Target - > Build Settings并将“Build Active Architecture Only”更改为YES . 清洁和建造!最后几个小时头痒解决了!
这可能与
libz.dylib
或libz.tbd
有关,只需将其添加到链接二进制文件的目标,并尝试再次编译 .在目标的Build Settings中将
-ObjC
设置为Other Linker Flags
解决了问题 .这对我有用:
ios sdk 9.3
into your build setting of app.xcodeproj 有效架构:armv7 armv7s构建活动架构:没有
清洁和建造,为我工作 .
下面的工作让我在64位模拟器和视网膜iPad Mini的Xcode 5.1上无错误地编译GPUImage,而无需从有效架构列表中删除arm64(这违背了拥有64位设备进行测试的目的64位性能) .
从GitHub页面下载.zip文件夹:https://github.com/BradLarson/GPUImage
解压缩,然后导航到“framework”文件夹 . 从这里,添加“Source”文件夹并将其复制到Xcode项目中 . 确保勾选“将项目复制到目标组的文件夹”,并勾选“为任何添加的文件夹创建组” . 这会将通用,iOS和Mac标头/实现文件复制到您的项目中 .
如果您因为编译iOS而不需要Mac文件,则可以在将文件复制到项目之前删除Mac文件夹,或者只是从Xcode中删除该组 .
将Source文件夹添加到项目后,只需使用以下内容开始使用GPUImage的类/方法:
有几点需要指出:
如果收到错误提示'Cocoa'未找到,您已将Mac文件夹/ Headers 添加到iOS项目中 - 只需从项目中删除Mac组/文件,警告就会消失
如果重命名Source文件夹(不是Xcode中的组),请在#import指令中使用该名称而不是"Source/GPUImage.h" . 因此,如果在添加到项目之前将文件夹重命名为GPUImageFiles,请使用:#import“GPUImageFiles / GPUImage.h
显然确保在Valid Architectures列表中选择arm64以利用A7 64位处理器!
这不是GPUImage.framework包(例如,如果您从http://www.raywenderlich.com/60968/ios-7-blur-effects-gpuimage下载了框架),因此它可能不是使用Brad Larson所期望的GPUImage的正确方法,但它适用于我当前的SpriteKit项目 .
没有必要链接到框架/库等 - 只需导入头和实现源文件夹,如上所述
希望上面有所帮助 - 尽管问题被多次询问,似乎没有明确的指示,但不要担心,GPUImage肯定适用于arm64架构!
通过Podfile和
pod install
安装pod后,我遇到此问题 . 在尝试了一堆不同的修复后,我终于手动导入了Pod(将必要的文件拖到我的项目中),这解决了问题 .当morisunshine回答指向正确的方向时,他的回答中的一点调整解决了我对iOS8.2的问题 . 谢谢他 .
我通过设置:解决了这个问题:
就我而言,我不得不寻找
C++ Standard Library
并确保libc++
是所选的 .对我来说,我在xcode 7.2中使用opencv 2.4.9 for iOS并且发生了上述错误,我使用opencv通过pod安装而不是离线opencv框架来解决错误 .
您可以尝试添加下面的opencv pod文本,如果已经使用,则删除脱机opencv框架 .
pod'OpenCV','2.4.9'
没有解决方案在我的情况下修复此错误(Xcode 9),使用
TesseractOCRiOS
. 经过几个小时的反复试验,我想出了一个很好的解决方案 . 我只是删除Podfile
中的'pod 'TesseractOCRiOS', '~> 4.0.0'
,运行pod install
. 然后,将pod 'TesseractOCRiOS', '~> 4.0.0'
添加回Podfile
并再次运行pod install
.砰!有用!
在某些情况下,如果您在.h文件中定义了另一个接口,但没有全部实现这些界面发生了这个错误 .
链接器无法在.m文件中找到实现,因此您需要在.m文件中为每个接口实现它 .
要解决此错误:
1.in .m文件,为每个接口提供实现 . 2.rebuild
在安装AWS框架以解决此问题后,我遇到了同样的问题,我已经从安装AWS POD后创建的项目更新了POD配置文件 . 检查配置文件如下
如果您的配置文件无法正常工作,请将您的 Other Linker flag 设置为$(继承)
转到目标构建设置 .
set BUILD ACTIVE ARCHITECTURE ONLY = NO,用于Debug和Release
构建并运行
如果体系结构和链接器设置看起来不错,请检查您的h文件 . 我的问题是同样的错误,但我重组了h文件,我删除了一个extern语句 . 其他m文件正在使用该变量,导致链接器错误 .
添加“Security.framework”为我做了诀窍 .
我知道这是一个古老的分支 . 但是,在迁移到最新的CocoaPods版本(1.0.0)并尝试重新安装所有pod之后,同样的问题开始发生在我身上 . 我遇到了“armv64缺少符号”链接器错误 . 奇怪的是,我通过执行以下步骤解决了这个问题:
删除所有pod(pod init,pod install)
以相反的顺序重写podfile(而不是:pod“Mixpanel”,pod“Intercom”,我用过:pod“Intercom”,pod“Mixpanel”)
Pod安装
颠倒podfile中的依赖项顺序并重建pod已解决了这个问题 .
"The OPN [Debug] target overrides the OTHER_LDFLAGS build setting" . 这是主要问题 . 在其他链接器标志的新行中添加$(继承)解决了我的问题 .