Qt & Firebase C++ SDK 在 iOS 上的链接问题
Qt && firebase C++ SDK linking issues on iOS
我有以下构建环境:
- 主机:OSX 10.12 Sierra
- XCode 9.2
- iOS版问题5.10.1
- Qt呼吸器4.7.0
- 防火带5.2
并尝试从支持firebase的iOS版QtCreator构建我的应用程序,但由于以下链接错误而失败:
体系结构arm64:
"_OBJC_CLASS_$_FIRMessaging"的未定义符号,引用自:firebase_messaging中的objc类引用(messaging_231c52c311096cfce13e67fa91eb9ac5.o(
"_objc_class_$_FIRApp",引用自:firebase中的objc类ref(app_ios_814e1620d4f88024cea4bade26623a67.o(
"_objc_class_$_FIROptions",引用自:firebase中的objc类ref(app_ios_814e1620d4f88024cea4bade26623a67.o(ld:符号不是为体系结构arm64 clang找到:错误:链接器命令失败退出代码1(使用-v查看调用(
我已经将我的项目简化为以下代码:
===main.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包含不同架构的不同框架目录:
- ~/fifirebase_cpp_sdk/frameworks/ios/universal
- ~/fifirebase_cpp_sdk/frameworks/ios/amd64
- ~/fifirebase_cpp_sdk/frameworks/ios/i386
- ~/firebase_cpp_sdk/框架/ios/x86_64
- ~/firebase_cpp_sdk/框架/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">
我查看了以下项目的代码:
- qtcloudmessaging:https://github.com/qt/qtcloudmessaging
- Qt防火墙:https://github.com/Larpon/QtFirebase
但我不明白为什么会发生这个链接器错误。。也许是qmake错误?
该错误意味着该项目缺少Firebase pod。
仅firebase_cpp_sdk
是不够的,此外,它还需要Firebase Core库。
为了添加Firebaselib,您应该迁移到使用cocoapods。
在项目的源根目录中,运行pod init
则将生成新的文件CCD_ 3。
打开文件,将以下行添加到目标pod 'Firebase/Analytics'
并保存文件。
运行后pod update
成功打开.xcworkspace
并照常构建。
- 使用jsoncpp库时出现链接问题
- Cmake 链接问题:未定义对 Button::mousePressEvent(QGraphicsSceneMouseE
- 如何将GTest与CMake一起使用?遵循谷歌指南时的链接问题
- 未解决的外部链接问题
- 'make check' GLIBC 运行时的链接问题
- 在树莓派上用libtorch构建程序时的链接问题
- 野牛弹性链接问题
- 与 AWS 开发工具包的链接问题
- Qt & Firebase C++ SDK 在 iOS 上的链接问题
- 链接问题 boost::p ython::numpy.
- 与 32 位共享对象的链接问题
- 在单元测试项目中包括 .c 文件,并从多个 cpp 文件访问它而不会出现链接问题
- 安卓链接问题
- LLVM 传递链接问题:未定义的符号
- Cmake Mac OSX库链接问题:在Linux上进行编译,但在Mac上进行了编译
- 用libclang解析源文件 - 链接问题包括文件
- C / C++链接问题与非常简单的设置
- Zbar 在 vs2015 链接问题
- Vulkan + GLFW + Cmake在Linux环境下的链接问题
- TFS构建由于链接问题而失败