我正在尝试将 firebase c++ sdk 添加到我的 cocos2d-x 3.14 游戏中。到目前为止,我已经在 firebase_cpp_sdk 目录中创建了 Android.mk:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := firebase-prebuilt
LOCAL_SRC_FILES := libs/android/$(TARGET_ARCH_ABI)/c++/libapp.a
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := firebase-analytics
LOCAL_SRC_FILES := libs/android/$(TARGET_ARCH_ABI)/c++/libanalytics.a
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include
include $(PREBUILT_STATIC_LIBRARY)
然后在我的 Android.mk 项目中添加:
LOCAL_C_INCLUDES += /Users/piotr/Documents/pierdoly/firebase_cpp_sdk/include
LOCAL_STATIC_LIBRARIES += firebase-prebuilt firebase-analytics
$(call import-add-path, /Users/piotr/Documents/pierdoly/firebase_cpp_sdk)
我可以同步 gradle 和构建项目。 我也可以
#include <firebase/app.h>
在 AppDelegate.cpp(或 h)中,它工作正常。甚至 Android studio 都可以看到所有的 firebase header ,我可以检查它们。
现在,在 applicationDidFinishLaunching 中我添加了这个:
#if (CC_TARGET_PLATFORM != CC_PLATFORM_ANDROID)
::firebase::App* app = ::firebase::App::Create(::firebase::AppOptions());
#else
::firebase::App* firebaseApp = ::firebase::App::Create(::firebase::AppOptions(), cocos2d::JniHelper::getEnv(), cocos2d::JniHelper::getActivity());
#endif
AppActivity.java 中还有通过 JNICALL 的替代版本(以传递正确的 Activity ,因为有人说上面的解决方案不起作用):
#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
JNIEXPORT void JNICALL Java_org_cocos2dx_cpp_AppActivity_initFirebase(JNIEnv* env, jobject thiz)
{
::firebase::App* app = ::firebase::App::Create(::firebase::AppOptions(), env, thiz);
}
#endif
但我的问题是:它甚至无法编译。存在链接器错误:
Error:(141) undefined reference to 'firebase::App::Create(firebase::AppOptions const&, _JNIEnv*, _jobject*)'
我可以在 Android Studio 中清楚地“进入”这个函数,并且我已经重新检查了两次我提供的参数。他们很好。然而链接器对我大喊大叫。
如何修复链接器?我在这里缺少什么?
最佳答案
我遇到了同样的问题,但找到了答案:
这是关于链接库的顺序。 你只需要像这样重新排列它:
LOCAL_STATIC_LIBRARIES += firebase-analytics firebase-prebuilt
它应该可以工作。
感谢这个 github issue 中的人
关于android - Android项目中的C++ Firebase链接错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41588724/