繁体   English   中英

架构 x86_64 的 Firebase 未定义符号

[英]Firebase Undefined symbols for architecture x86_64

我正在使用 firebase 作为我在 iOS 中工作的项目的一部分,当我尝试针对 iPhone 6 或 7 模拟器编译我的代码进行测试时,我偶然发现了以下链接错误。

Undefined symbols for architecture x86_64:
  "_OBJC_CLASS_$_GTMSessionUploadFetcher", referenced from:
      objc-class-ref in FirebaseStorage(FIRStorageUploadTask_d5061b1e2b5f1bb249816cc5fc42ff62.o)
  "_OBJC_CLASS_$_GTMLogger", referenced from:
      objc-class-ref in FirebaseMessaging(GIPReachability_ae5504e4a6a28a1d8997c6f38e8bff8b.o)
  "_kGTMSessionUploadFetcherStandardChunkSize", referenced from:
      -[FIRStorageUploadTask enqueue] in FirebaseStorage(FIRStorageUploadTask_d5061b1e2b5f1bb249816cc5fc42ff62.o)
  "_GTMFetcherStandardUserAgentString", referenced from:
      -[FIRAuthBackendRPCIssuerImplementation init] in FirebaseAuth(FIRAuthBackend_ea73237c278bd1b78e1c76db2a16775a.o)
  "_OBJC_CLASS_$_GTMSessionFetcher", referenced from:
      objc-class-ref in FirebaseStorage(FIRStorageDownloadTask_c390366e83519f6636ca985ecb70e5d0.o)
      objc-class-ref in FirebaseStorage(FIRStorage_691ea9ac7cb4d224d37df2ff8a911989.o)
  "_OBJC_CLASS_$_GTMSessionFetcherService", referenced from:
      objc-class-ref in FirebaseAuth(FIRAuthBackend_ea73237c278bd1b78e1c76db2a16775a.o)
      objc-class-ref in FirebaseStorage(FIRStorage_691ea9ac7cb4d224d37df2ff8a911989.o)
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

我正在使用 Xcode 8.2.1,swift 3.0,我的项目中还有以下 Pod 文件

pod 'Braintree'
pod 'Firebase/Auth'
pod 'Firebase/Database'
pod 'Firebase/Core'
pod 'Firebase/Storage'
pod 'Firebase/Messaging'
pod 'Firebase/RemoteConfig'
pod 'GeoFire', :git=>'https://github.com/firebase/geofire-objc.git'
pod 'ObjectMapper', '~> 2.2'

我已经做了一个 pod 更新以防万一有些东西已经过时了,但没有运气。 当我使用 iPhone 4 或 5 模拟器时,代码可以正常编译和运行。

编辑:

我已将 Build Active 架构设置为 No,在有效架构中我列出了 arm64、armv7、armv7s,现在 Objectmapper 失败,即使在文件中声明了import ObjectMapper

 Use of undeclared type 'Mappable'

任何帮助将不胜感激。 先感谢您。

乔治。

刚刚发现了一个类似的问题,并通过清除 Pod-Cache 解决了它。

清除 CocoaPods 缓存

pod deintegrate && pod cache clean --all

重新安装 Pod

吊舱安装

对我来说,我只是将 Firebase 框架安装到 Xcode,由于其他无法解决的问题,我没有使用 CocoaPods。 构建后有类似上面的错误,“没有找到架构 x86_64 的符号”。 (也许是因为我在 VMWare 上使用 Xcode)

然后我必须手动转到General - Linked Frameworks and Libraries并添加:

libsqlite3.tbd、libz.tbd、libc++.tbd

使项目正常工作。

使用 CocoaPods 为 Firebase 安装 pod 后也遇到了这个问题,如 Firebase 站点中所述:

https://firebase.google.com/docs/ios/setup?hl=es-419#prerequisites

吊舱“Firebase/Analytics”吊舱“Firebase/Auth”

在安装 Pod 的过程中,我收到了一条警告:

[!] The target `myTarget [Debug]` overrides the `OTHER_LDFLAGS` build setting defined in `Pods/Pods.xcconfig'.
    - Use the `$(inherited)` flag, or
    - Remove the build settings from the target.

[!] The target `myTarget [Release]` overrides the `OTHER_LDFLAGS` build setting defined in `Pods/Pods.xcconfig'.
    - Use the `$(inherited)` flag, or
    - Remove the build settings from the target.

当我编译时,我收到了几个文件的错误:

Undefined symbols for architecture x86_64:

我在本答案中的答案之前尝试了以下答案的解决方案,它很有魅力:

目标 ... 覆盖 `Pods/Pods.xcconfig 中定义的 `OTHER_LDFLAGS` 构建设置

基本上解决方案是(如@Ankish Jain 所解释的):

转到您的目标构建设置 -> 其他链接器标志 -> 双击 -> + 按钮。 将 $(inherited) 添加到新行。

之后我编译成功,新标志自动添加到构建设置中。

我尝试了“清除 Cocoapods 缓存”和“删除派生数据”解决方案,但没有奏效。 对我有用的是我在 Carthage 设置中找到的一个步骤(我仍在使用 Cocoapods)

$(OTHER_LDFLAGS) -ObjC标志$(OTHER_LDFLAGS) -ObjC到“构建设置”中的“其他链接器标志”。

你可以在这里看到这个步骤: https : //github.com/firebase/firebase-ios-sdk/blob/master/Carthage.md

我的信息

安装:Cocoapods | SDK:FirebaseAnalytics (6.1.2) | IDE:Xcode 11.0 | macOS:莫哈韦沙漠 10.14.5 测试版 | 语言:Swift 4.2 | 平台目标:iOS 11.0+

派生数据似乎有问题。 我退出了 Xcode,我删除了/Users/USER_NAME/Library/Developer/Xcode/PROJECT_NAME所有派生数据

重新启动 Xcode,编译并按预期工作,无需更改Active Architecture Only或任何内容。

也遇到了这个问题...
$(inherited)添加到构建设置中的其他链接器标志,现在一切正常

我尝试了这个问题中的解决方案,但没有任何效果。 还在 SO 和 GitHub 问题中找到了其他线程。 没有任何帮助。 我正在使用 Xcode 9.2、Swift 4、最新版本的可可豆荚。 这对我有用...

首先,我的 podfile 只包含一个 firebase pod,因为此时我只使用 Analytics,但是如果您使用更多,解决方法应该是相同的。
吊舱“Firebase/核心”

其次,像文档说明一样,确保将 -ObjC 添加到您的其他链接器标志中。 我在项目和目标级别的构建设置中都这样做了。 他们是不同的。

第三个也是最重要的,在项目级别的构建设置,其他链接器标志,添加以下内容

-框架

“火力地基核心”

-框架

“Firebase 分析”

-框架

“FirebaseInstanceID”

-框架

“FirebaseNanoPB”

-框架

“FirebaseCoreDiagnostics”

-框架

“纳米”

在没有 CocoaPods ( https://firebase.google.com/docs/ios/setup#frameworks ) 的情况下进行集成的步骤之后,我遇到了同样的问题,其他答案都没有帮助我。

对我有用的是从目标的构建设置上的其他链接器标志中删除 -ObjC。

我仍然不确定为什么它会起作用,即使它明确地写在添加这个标志的步骤上,只是想分享对我有用的东西,以尝试帮助其他人。

遇到了同样的问题,对我来说问题是我手动导入了 FirebaseMessaging 框架,方法是下载整个 Firebase SDK,然后手动将 Messaging 框架导入到项目中(我没有使用 Cocoapods 或 Carthage)。 我没有在同一个文件夹“Protobuf.framework”中导入另一个框架。 添加 Protobuf 并确保目标成员资格包括我的项目目标后,它就起作用了。

我之前遇到过这个问题,看来您需要:

rm -rf ios/Podfile ios/Podfile.lock ios/Pods ios/Runner.xcworkspace

然后运行flutter run

来源: https : //github.com/flutter/flutter/issues/41900

更新:也运行此修复问题: rm -f ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings

检查您的其他链接器标志:有时添加或删除$(inherited)可以解决问题。

如果没有任何效果,请尝试降级 firebase pod。 我将它降级为“6.27.0”,它的作用就像一个魅力。 在这里阅读了这个解决方案。

pod 'Firebase/Core', '6.27.0'

当我在不使用 CocoaPod 的情况下手动集成 Firebase 并为模拟器构建时,我遇到了同样的错误。 (仅设备构建没有问题。)

这是一个老问题,但它是相关的,所以我展示了我最近的解决方案。

首先,我放弃了只为模拟器构建。

构建时间太长,但我将“仅构建活动架构”设置为“否”以构建包括模拟器在内的所有目标。

我还在构建设置的“排除架构”中添加了“任何 iOS 模拟器 SDK - arm64”,因为我的 Mac OS 架构不是“arm64”而是“x86_64”。

如有必要,您还应该添加“Any iOS Simulator SDK - i386”。 Firebase 包含“i386”架构,但其他一些 Ad SDK 不再支持“i386”。

这是我可以接受的解决方案。

在“构建设置”中,删除“ -ObjC”标志,仅保留“ $(继承)”有效。

如果不起作用,请确保已链接了所有需要的框架(如果未使用自动链接)。 所需的库可以在框架“ Modules / module.modulemap”文件中看到。

在我的情况下,从Other Linker Flags删除$(inherited)后一切正常

对我来说,问题是当我拖入新框架时 xCode 有一个错误,它不会正确设置目标成员资格。

展开所有文件夹并转到您刚刚在此之前拖入的 .framework 文件或 .m 文件,突出显示每个文件,按 cmd+option+1 并确保选中目标成员资格框并将其设置为必需: 在此处输入图片说明

就我而言,为了仅使用 Firebase Auth 和 Firebase Firestore,使用 Cocoapods 进行安装,我所要做的就是单击 Build Settings 中Other Linker Flags下的DebugRelease部分的+号。 $(inherited)标志是自动添加的。 在那之后建造得很好!

截屏

我已经尝试了所有的建议,但只有这个有用!!! 安装 firebase pod 后,我的错误是这样的:

Undefined symbols for architecture x86_64
error: linker command failed with exit code 1 (use -v to see invocation)

这是对我有用的唯一解决方案:

pod deintegrate && pod cache clean --all

rm -rf ~/Library/Developer/Xcode/DerivedData

然后将以下版本的 Firebase 添加到您的 pod 文件中

pod 'Firebase', '6.27.0'

进而

pod install

在这里尝试了其他答案中的大部分建议,但没有一个修复它。 最终修复它的是将以下内容添加到 Podfile 的顶部:

$RNFirebaseAsStaticFramework = true

这是此处说明的一部分,但我一定错过了它: https ://rnfirebase.io/#altering-cocoapods-to-use-frameworks

暂无
暂无

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

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