簡體   English   中英

Qt && firebase C++ SDK iOS 上的鏈接問題

[英]Qt && firebase C++ SDK linking issues on iOS

我有以下構建環境:

  • 主機:OSX 10.12 Sierra
  • XCode 9.2
  • Qt 5.10.1 為 iOS
  • QtCreator 4.7.0
  • firebase 5.2

並嘗試使用 firebase 支持從 QtCreator 為 iOS 構建我的應用程序,但它失敗並出現以下鏈接錯誤:

架構 arm64 的未定義符號:
“_OBJC_CLASS_$_FIRMessaging”,引用自:firebase_messaging 中的 objc-class-ref(messaging_231c52c311096cfce13e67fa91eb9ac5.o)
“_OBJC_CLASS_$_FIRApp”,引用自:firebase 中的 objc-class-ref(app_ios_814e1620d4f88024cea4bade26623a67.o)
“_OBJC_CLASS_$_FIROptions”,引用自:firebase 中的 objc-class-ref(app_ios_814e1620d4f88024cea4bade26623a67.o) ld:未找到體系結構 arm64 的符號 clang:錯誤:linker 命令失敗,退出代碼 1(使用 -v )

我已將我的項目簡化為以下代碼:

== 主.cpp ==

#include <QCoreApplication>

#include <firebase/app.h>
#include <firebase/messaging.h>
#include <firebase/util.h>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    ::firebase::App *fapp = ::firebase::App::Create();
    Q_UNUSED(fapp);
    return a.exec();
}

項目文件是:

QT -= gui
CONFIG += c++11 console
CONFIG -= app_bundle

# Check for GOOGLE_FIREBASE_SDK environment variable.
ENV_GOOGLE_FIREBASE_SDK = $$(GOOGLE_FIREBASE_SDK)
# Or define GOOGLE_FIREBASE_SDK path here.
GOOGLE_FIREBASE_SDK =

isEmpty(ENV_GOOGLE_FIREBASE_SDK) {
    isEmpty(GOOGLE_FIREBASE_SDK) {
        message("GOOGLE_FIREBASE_SDK" environment variable not detected!)
    }
}

INCLUDEPATH += $$(GOOGLE_FIREBASE_SDK)
INCLUDEPATH += $$(GOOGLE_FIREBASE_SDK)/include

SOURCES += \
        main.cpp

FCM_LIBS_PATH = $$(GOOGLE_FIREBASE_SDK)/frameworks/ios/universal
message("FCM_LIBS_PATH = $$FCM_LIBS_PATH")

LIBS += -F$$FCM_LIBS_PATH \
   -framework firebase_messaging \
   -framework firebase \
   -framework Foundation \
   -framework UserNotifications \
   -framework UIKit \
   -framework CoreGraphics

firebase SDK 包含不同架構的不同框架目錄:

  • ~/firebase_cpp_sdk/frameworks/ios/universal
  • ~/firebase_cpp_sdk/frameworks/ios/amd64
  • ~/firebase_cpp_sdk/frameworks/ios/i386
  • ~/firebase_cpp_sdk/frameworks/ios/x86_64
  • ~/firebase_cpp_sdk/frameworks/ios/armv7

正如我所看到的與“arm64”架構相關的錯誤,因此,我已將項目文件 LIBS 更改為使用“arm64”而不是“universal”,但這無濟於事。

我還嘗試使用 qmake 生成的 xcode.project 文件從 XCode 構建項目,但出現相同的錯誤。

我在 stackoverflow 上查看了類似的問題,但解決方法無濟於事:

  • 我試圖刪除 /Users/admin/Library/Developer/Xcode/DerivedData 目錄。
  • 我嘗試使用 XCode 選項“Build Settings -> Build Active Architecture Only -> yes|no”

我查看了以下項目的代碼:

但我不明白為什么會出現這個 linker 錯誤。也許是 qmake 錯誤?

該錯誤表示該項目缺少 Firebase pod。

光有firebase_cpp_sdk是不夠的,另外還需要Firebase核心庫。

為了添加 Firebase 庫,您應該遷移到使用 cocoapods。

在項目的源代碼根目錄中,運行pod init將生成一個新文件Podfile

打開文件,將以下行添加到目標pod 'Firebase/Analytics'並保存文件。

成功運行pod update后,打開.xcworkspace並照常構建。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM