繁体   English   中英

架构 arm64 的未定义符号

[英]Undefined symbols for architecture arm64

每次从 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 上尝试各种解决方案,但还没有任何解决方案起作用。

如何修复此 Apple Mach-O 链接器错误?


刚刚发现另一个可能有趣的警告,我希望这能引导我找到解决方案:

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

如果您的ArchitecturesValid Architectures都没有问题,您可以检查您是否在Other Linker Flags 中添加了$(inherited) ,它会将 pods 中生成的链接器标志添加到其他链接器标志中,如下所示:在此处输入图片说明

问题是 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框架。

错误消息是:

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)

解决方案:

  1. 转到您的项目
  2. 选择你的目标
  3. 然后,转到构建阶段
  4. 使用库打开链接二进制文件
  5. 最后,只需添加+ AVKit框架/任何其他框架

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

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

文件夹放置:

〜/图书馆/开发人员/Xcode/DerivedData/

在此处输入图片说明

体系结构ARMv7的armv7s,积极构建体系结构只NO,在项目的每个目标,包括每一个豆荚

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

目标会员

以下是为什么build_active_architecture设置为 NO 的一些解释。 Xcode 现在会检测您连接了哪些设备,并相应地设置活动架构。 因此,如果您将第二代 iPod Touch 插入您的计算机,Xcode 应该将活动架构设置为 armv6。 使用上述 Debug 配置构建目标现在只会构建 armv6 二进制文件以节省时间(除非您有一个庞大的项目,否则您可能不会注意到差异,但我猜秒数会随着时间的推移而增加)。

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

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

您只需从Valid Architecture 中删除arm64并将NO设置为Active Architecture Only 现在只需清理、构建和运行。 您不会再看到此错误。

:) 知识点

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

我通过将有效的 archs 设置为 armv7 armv7s 并将 build active architectures 设置为仅在 release 中设置为 YES 然后从命令行执行新的“pod install”来解决它

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

我通过从 Valid Architectures 列表中删除 arm64 来解决这个问题,然后将 Build Active Architecture Only 设置为 NO。 在我看来,这比上面显示的其他方式更有意义。 我发布以防其他人无法获得上述任何解决方案为他们工作。

升级到 Xcode 5.1 后我遇到了同样的问题,并通过将Architectures设置为armv7 armv7s修复它

一整天都被这个问题困住了。

我有多个方案,它为 Demo、Internal、Release 编译得很好 - 但是 Debug 方案无法编译并且抱怨 libPods.a 丢失。

解决方案是转到“项目”->“目标”->“构建设置”并将“仅构建活动架构”更改为“是”。 清洁和建造! 终于解决了几个小时的头痒!

在目标的构建设置中将-ObjC设置为Other Linker Flags解决了该问题。

这对我有用:

IOS SDK 9.3

进入 app.xcodeproj 的构建设置有效架构:armv7 armv7s 构建活动架构:否

清洁和建造,为我工作。

如果您在以发布模式(或存档)构建时在 Flutter 项目中遇到此问题,请查看我的答案: https : //stackoverflow.com/a/61446892/5502121长话短说:

  • 在文件 > 项目设置中将您的构建系统设置为新建构建系统...
  • 删除iosbuild_ios文件夹
  • 运行flutter create . 初始化新的ios模块
  • 运行pod install
  • 运行flutter pub get
  • 检查您的 Xcode 构建配置(它应该是Release模式和General iOS Device

你可以走了

以下内容对我有用,可以在 64 位模拟器和 Retina iPad Mini 的 Xcode 5.1 上无错误地编译 GPUImage,而无需从 Valid Architectures 列表中删除 arm64(这违背了拥有 64 位设备进行测试的目的) 64 位性能)。

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

解压缩并导航到“框架”文件夹。 从这里,将“Source”文件夹添加并复制到您的 Xcode 项目中。 确保勾选“将项目复制到目标组的文件夹”,并勾选“为任何添加的文件夹创建组”。 这会将通用、iOS 和 Mac 头文件/实现文件复制到您的项目中。

如果由于为 iOS 编译而不需要 Mac 文件,则可以在将文件复制到项目之前删除 Mac 文件夹,或者只需从 Xcode 中删除该组。

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

#import "Source/GPUImage.h" 

有几点需要指出:

  • 如果您收到错误提示“找不到可可”,则您已将 Mac 文件夹/标题添加到您的 iOS 项目中 - 只需从您的项目中删除 Mac 组/文件,警告就会消失
  • 如果您重命名 Source 文件夹(不是 Xcode 中的组),请在 #import 指令中使用该名称而不是“Source/GPUImage.h”。 因此,如果在添加到项目之前将文件夹重命名为 GPUImageFiles,请使用:#import "GPUImageFiles/GPUImage.h
  • 显然确保在有效架构列表中选择 arm64 以利用 A7 64 位处理器!
  • 这不是 GPUImage.framework 包(例如,如果您从http://www.raywenderlich.com/60968/ios-7-blur-effects-gpuimage下载了框架),因此它可能不是使用 GPUImage 的正确方法Brad Larson 打算这样做,但它适用于我当前的 SpriteKit 项目。
  • 无需链接到框架/库等 - 只需如上所述导入头文件和实现源文件夹

希望以上内容有所帮助-尽管多次询问了该问题,但似乎在任何地方都没有明确的说明,但不要担心,GPUImage 绝对适用于 arm64 架构!

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

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

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

ARCHS = armv7

VALID_ARCHS = armv6 armv7 armv7s arm64

BUILD ACTIVE ARCHITECTURE ONLY= NO
  1. 转到目标构建设置。
  2. 为调试和发布设置 BUILD ACTIVE ARCHITECTURE ONLY = NO
  3. 构建并运行

就我而言,我不得不寻找

C++ Standard Library并确保选择的是libc++

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

可以通过添加下面的opencv pod文本来试试,如果你用过的话,删除离线的opencv框架。

吊舱'OpenCV','2.4.9'

在我的案例(Xcode 9)中,没有任何解决方案可以使用TesseractOCRiOS修复此错误。 经过数小时的反复试验,我想出了一个很好的解决方案。 我只是删除Podfile中的'pod 'TesseractOCRiOS', '~> 4.0.0' ,运行pod install 然后,将pod 'TesseractOCRiOS', '~> 4.0.0'Podfile并再次运行pod install

砰! 有用!

“OPN [Debug] 目标覆盖 OTHER_LDFLAGS 构建设置”。 这是主要问题。 在其他链接器标志的新行中添加 $(inherited) 解决了我的问题。 在此处输入图片说明

在某些情况下,如果您在.h 文件中再定义一个接口,但没有实现所有这些接口,则会发生此错误。

链接器无法在 .m 文件中找到实现,因此您需要在 .m 文件中为每个接口实现它。

要解决此错误:

1.在.m文件中,提供每个接口的实现。 2.重建

我遇到了同样的问题。 我在这里找到的解决方案: Why linker link static libraries with errors? IOS

添加$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)库搜索路径解决了这个问题。

每次从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上使用各种解决方案,但是还没有任何一种可以使用。

如何修复此Apple Mach-O链接器错误?


刚刚发现了另一个可能有趣的警告,希望这可以引导我找到解决方案:

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

这个错误消耗了我一整天,所以想写一些对我真正有用的东西

  1. 删除 .xworkspace
  2. 删除 podfile.lock
  3. 删除 Pods 文件夹/目录

不要删除 PODFILE

毕竟,CLEAN(OPTION + SHIFT + CMD + K) --> BUILD(CMD + B) --> RUN(CMD + R)

我希望这真的对你有用:)

在安装 AWS 框架来解决这个问题后,我遇到了同样的问题,我已经更新了安装 AWS POD 后创建的项目中的 POD 配置文件。 检查配置文件如下

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)   

如果您的配置文件无法正常工作,则将您的其他链接器标志设置为 $(inherited)

如果体系结构和链接器设置看起来不错,请检查您的h文件。 我的问题是同样的错误,但是我重组了h文件,并删除了extern语句。 其他m个文件正在使用该变量,从而导致链接器错误。

添加“ Security.framework”对我有用。

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

  1. 删除所有吊舱(吊舱初始化,吊舱安装)

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

  3. 吊舱安装

反转Podfile中的依存关系顺序并重建Pod已解决了该问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM