架构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个这样的耳机,用于我使用的各种pod。

我试图使用XCode 5为iPhone 5S构建。

我一直在尝试各种解决方案这里所以,但还没有得到任何工作。

我如何解决这个苹果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

491933 次浏览

问题是cocoapods还没有为arm64架构构建,因此当你构建它们时,它们不能链接。在更新并使用该体系结构之前,您可能无法使用这些包。您可以通过进入项目->目标(您的项目名称)->构建设置并将架构更改为标准架构(armv7, armv7s),并将有效架构更改为armv7, armv7s来修复链接器错误。

但请注意,这意味着您无法获得64位处理器的全部功能。你说你在为5s做产品,所以你需要这个可能是有原因的。如果您出于某种原因绝对需要这种能力(也许您正在构建一个游戏),并且非常需要这些文件,那么您可以提交一个pull请求,然后通过将从开源项目中提取的文件中的相同字段设置为arm64,将项目重新编译为arm64。但是,除非你真的需要这些文件是64位兼容的,否则现在看起来有点过分了。

编辑:有些人还报告说,将为活动架构构建设置为YES也是解决这个问题的必要条件。

截至2014-04-28,设置应该是这样的:

enter image description here

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

ARCHS = armv7 armv7s

VALID_ARCHS = armv6 armv7 armv7s arm64

我通过将有效的arch设置为armv7 armv7s,并在发布中将构建活动架构设置为YES,然后从命令行执行新的“pod install”来解决这个问题

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

我通过从有效架构列表中删除arm64,然后将仅构建活动架构设置为NO来解决这个问题。在我看来,这比上面所示的其他方式更有意义。我写这篇文章是为了防止其他人无法得到上述任何一种解决方案。

我在升级到Xcode 5.1后也遇到了同样的问题,并通过将体系结构设置为v7 v7来修复它

下面的工作为我得到GPUImage编译没有错误在Xcode 5.1 64位模拟器和视网膜iPad Mini, 没有需要从有效架构列表中删除arm64(这违背了拥有一个64位设备测试64位性能的目的)。

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

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

如果你不需要Mac文件,因为你正在为iOS编译,你可以在复制文件到你的项目之前删除Mac文件夹,或者简单地从Xcode中删除组。

一旦你将Source文件夹添加到你的项目中,只需使用以下命令开始使用GPUImage的类/方法:

#import "Source/GPUImage.h"

有几件事需要指出:

  • 如果你得到一个错误说'Cocoa' not found,你已经将Mac文件夹/headers添加到你的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,布拉德拉尔森的意图,但它适用于我目前的SpriteKit项目。
  • 不需要链接到框架/库等-只需导入头部和实现源文件夹如上所述

希望上面的内容能有所帮助——尽管这个问题被问了很多次,但似乎在任何地方都没有明确的说明,但不要害怕,GPUImage绝对适用于arm64架构!

为项目中的每个目标设置体系结构v7 v7只构建活动架构没有,包括豆荚中的每一个人

如果你的体系结构有效的体系结构是正确的,你可以检查你是否添加了$(inherited),它将添加在pods中生成的链接器标志,如下所示: enter image description here

一整天都在纠结这个问题。

我有多个方案,它对演示,内部,发布编译良好-然而调试方案只是不会编译,并抱怨libPods。一个失踪。

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

这个问题发生在我通过Podfile和pod install安装pod后。在尝试了一系列不同的修复后,我最终只是手动导入Pod(将必要的文件拖到我的项目中),这就解决了问题。

下面是为什么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 < / p >
这个解决方案对我来说是唯一有效的: 进入CordovaLib设置,将arm64添加到Valid Architectures.

将目标的Build Settings中的-ObjC设置为Other Linker Flags解决了这个问题。

为了克服这个问题,我在安装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)

如果你的配置文件不能正常工作,那么将你的其他链接标志设置为$(继承)

由于morisunshine的答案指向正确的方向,他的回答中的一个小调整解决了我的问题。感谢他。

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

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++是选中的对象。

我通过检查右边目标成员中所选的实现文件来修复我的问题。这是非常有用的,特别是在处理扩展,即自定义键盘。

Target Membership

我在实现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 框架 /任何其他的框架

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

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

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

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

文件夹位置:

~ /图书馆/开发/ Xcode / DerivedData /

enter image description here

这招对我很管用:

Ios SDK 9.3

到app.xcodeproj的构建设置中 有效架构:armv7 armv7s 构建活动架构:No

干净又结实,对我很管用。

添加“Security.framework”对我来说很管用。

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

  1. 删除所有pod (pod init) 李圆荚体安装)< / p > < / >

  2. 以相反的顺序重写podfile(而不是: 豆荚“Mixpanel年”, 豆荚“对讲机”, 我使用: 豆荚“对讲机”, 豆荚”“Mixpanel 李)< / p > < / >

  3. 圆荚体安装

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

对于我来说,我在xcode 7.2 For iOS中使用opencv 2.4.9,出现了上述错误,我通过pod install使用opencv而不是离线opencv框架解决了这些错误。

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

'OpenCV', '2.4.9'

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

你只需要从有效的体系结构中删除arm64,并将没有设置为仅活动体系结构。现在只需要清洁、构建和运行。您将不会再次看到此错误。

:) KP

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

砰!它的工作原理!

" OPN[调试]目标覆盖OTHER_LDFLAGS构建设置"。这是主要问题。在添加$(继承)在其他链接器标志的新行解决了我的问题。 enter image description here < / p >

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

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

要解决此错误:

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

我的问题是,我已经有一些Facebook sdk在我的项目(FBSDKLoginKit和FBSDKCoreKit)。

我只需要一个SDK (FBSDKShareKit)并导入它,从而给出了“未定义的arm64符号架构”。

由于FBSDKShareKit依赖于更新版本的FBSDKCoreKit,通过更新其他框架,一切都重新工作了。

当我在构建第二级框架时,我的'伞的框架'有这个问题。

我通过改变我的第一个关卡框架的“通用iOS设备”构建方案来解决这个问题。我认为这将改变_CodeSignature,当我把我的整个“伞形框架”推到GitHub时,我看到了差异。

如果使用c++编写的.framework/.a文件,在调用c++代码时,其文件需要更改为.mm文件。

我浪费了半天时间……

我也面临同样的问题。 我在这里找到的解决方案:为什么链接器链接有错误的静态库?iOS

$ (TOOLCHAIN_DIR) / usr / lib /快速/美元(PLATFORM_NAME)添加到库搜索路径中解决了这个问题。

将库放在项目的同一文件夹中,这对我来说是有效的

在我使用dlib在IOS的情况下,我需要删除“继承”从构建设置/预处理器宏。

这个链接错误消息表明定义它的源文件没有被标记为应用程序目标的一部分。找到源文件,并使用右边的file属性检查器来检查应用程序目标的目标成员条目。

<强>解决方案: 选择文件-> openFile Inspector ->参见目标成员->检查如果未选中目标您的运行目标

detail 希望能帮到你。我添加框架,问题已经解决

如果你在发布模式(或存档)构建时遇到了这个问题,请查看我的这个答案:https://stackoverflow.com/a/61446892/5502121 长话短说:

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

你可以开始了

Other Linker Flags中的$(inherited)替换-ObjC解决了我的问题

这个错误花费了我一整天的时间,所以我想写一些真正对我有用的东西

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

不删除podfile"

在这之后,CLEAN(OPTION + SHIFT + CMD + K)——>BUILD(CMD + B)—>运行(cmd + r)

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

调用pod update,然后从pod文件中删除pod 'ARCore',并再次调用pod install。然后将pod 'ARCore'添加到pod文件中,并再次调用pod install

如果你正在使用m1 (arm64),你有问题,你可以在x86模式下运行:

  • 右键单击xcode,点击Get Info按钮
  • 勾选Open using Rosetta选项

这将是一个缓慢但有效的过程。

以下是对我有用的:

  1. 移除所有豆荚 李cd ios && pod deintegrate < / >
  2. ios/Podfile ->use_flipper!()
  3. 重新安装所有吊舱arch -x86_64 pod install
  4. 运行你的应用程序:)npm run ios
< p >环境:
节点版本号:14.17.1
.使用实例 RN版本:6.0.0
操作系统:macOS BigSur m1