【问题标题】:Firebase Undefined symbols for architecture x86_64架构 x86_64 的 Firebase 未定义符号
【发布时间】:2017-07-06 15:14:27
【问题描述】:

我正在使用 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 architectures 设置为 No,在有效的架构中我列出了 arm64、armv7、armv7s,现在 Objectmapper 失败了,即使在文件中声明了 import ObjectMapper

 Use of undeclared type 'Mappable'

任何帮助将不胜感激!提前谢谢你。

乔治。

【问题讨论】:

  • 在 XCode 中标记Build Setting > Build Active Architectures only > YES
  • 嗨,Sachin,感谢您的建议,但不幸的是,此设置已设置为 YES
  • 对不起,应该是NO
  • 我刚刚尝试过,但现在我遇到了更多类似于我之前遇到的错误
  • 我认为我的问题是我的有效架构下有 arm64。我自己没有把它放在那里,我只是注意到它的存在。现在我删除了它的编译。我希望我没有通过删除这个来搞砸任何其他事情

标签: ios firebase


【解决方案1】:

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

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

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

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

我还在 Build Settings 的“Excluded Architectures”中添加了“Any iOS Simulator SDK - arm64”,因为我的 Mac OS 架构不是“arm64”而是“x86_64”。

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

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

【讨论】:

  • 我发现有时即使这个解决方案也不起作用。如果无法链接到 x86_64 框架,则应删除项目中的“bin”和“build”文件夹,然后重新构建。那会奏效的。
【解决方案2】:

我已经尝试了所有建议,但只有一个有效!安装 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

【讨论】:

    【解决方案3】:

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

    pod 'Firebase/Core', '6.27.0'
    

    【讨论】:

      【解决方案4】:

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

      【讨论】:

      • 还可以尝试在 $(inherited) 之后直接添加或删除 -ObjC
      【解决方案5】:

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

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

      我仍然不确定为什么这样做有效,即使添加此标志的步骤上明确写了,只是想分享对我有用的东西,以帮助其他人。

      【讨论】:

      • +1 这对我有用。在 Xcode 11 和 12 beta 中测试,使用 Cocoapods 导入。这也解决了我在使用 AppCenter pod 时遇到的类似错误。
      【解决方案6】:

      在我的情况下,对于仅使用 Firebase Auth 和 Firebase Firestore,使用 Cocoapods 进行安装,我所要做的就是在构建设置中单击 DebugRelease 部分的 + 符号。 $(inherited) 标志是自动添加的。之后就建好了!

      Screenshot

      【讨论】:

        【解决方案7】:

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

        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

        【讨论】:

          【解决方案8】:

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

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

          【讨论】:

            【解决方案9】:

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

            【讨论】:

              【解决方案10】:

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

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

              pod 'Firebase/Analytics' pod '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:
              

              我在这个答案之前尝试了以下答案的解决方案,它起到了一种魅力:

              The target ... overrides the `OTHER_LDFLAGS` build setting defined in `Pods/Pods.xcconfig

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

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

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

              【讨论】:

              • 非常感谢!我在安装 Firebase pod 时也收到了这些警告,但只是忽略了它,并且正在努力使 Analytics 工作。作为一个非 iOS 开发者,其他答案对我来说没有任何意义。
              • 不要忘记删除派生数据并在执行此操作后清理项目。
              【解决方案11】:

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

              $(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:Mojave 10.14.5 测试版 |语言:Swift 4.2 |平台目标:iOS 11.0+

              【讨论】:

              • 就是这样!救生员
              • 你真是个天才。为我工作!
              【解决方案12】:

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

              【讨论】:

                【解决方案13】:

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

                清除 CocoaPods 缓存

                pod deintegrate && pod cache clean --all

                重新安装 Pod

                吊舱安装

                【讨论】:

                • 删除./Pods/ 文件夹并运行pod install 也可以:)
                • 对我不起作用。当我添加 [[FIRCrashlytics crashlytics] log:@"Simple string message"]; 时,FirebaseCrashlytics 出现此错误
                【解决方案14】:

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

                【讨论】:

                  【解决方案15】:

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

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

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

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

                  -框架

                  “FirebaseCore”

                  -框架

                  “Firebase 分析”

                  -框架

                  “FirebaseInstanceID”

                  -框架

                  “FirebaseNanoPB”

                  -框架

                  “FirebaseCoreDiagnostics”

                  -框架

                  “纳米”

                  【讨论】:

                  • 我没有高兴地尝试了所有这些:(你还有什么需要做的吗?(只是尝试使用分析)
                  【解决方案16】:

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

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

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

                  为了项目工作。

                  【讨论】:

                  • 我只需要加libsqlite3.tbd
                  • 对我来说是 libsqlite3.tdb、libc++.tbd、StoreKit.framework
                  • libsqlite3.tbd, libz.tbd, libc++.tbd, StoreKit.framework 对于我来说是 Firebase v5.16.0。
                  • 我还必须在 Build Settings / Other Linker Flags 中添加 -ObjC 条目
                  • 根据 Firebase 自述文件,应该不需要添加这些链接库。这些库由一个或多个 Firebase 框架使用。对我有用的是创建一个桥接头,向其中添加“#import Firebase.h”,然后在 Build Settings > Objective-C Bridging Header 中引用它。
                  【解决方案17】:

                  这似乎是派生数据的故障。我退出了 Xcode,我删除了 /Users/USER_NAME/Library/Developer/Xcode/PROJECT_NAME 中的所有 Derived Data

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

                  【讨论】:

                  • 在终端执行:rm -rf ~/Library/Developer/Xcode/DerivedData
                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 2014-08-07
                  • 2012-07-20
                  • 1970-01-01
                  • 2015-08-23
                  • 2014-05-27
                  • 2016-06-20
                  • 2016-06-14
                  相关资源
                  最近更新 更多