Михаиллл
МихаилллMay 2, 2020, 11:35 a.m.

Как в Qt подключить Firebase

Добрый день.
Нужно подключить Firebase к десктопной программе.
Скачал firebase_cpp_sdk и подключил так к проекту

INCLUDEPATH += E:/Programs/firebase_cpp_sdk/include

На этом моменте все компилируется. Потом добавляю

#include "firebase/auth.h"

и получаю 2 ошибки:

E:\QTProject\testFirebase\firebase.cpp:-1: ошибка: undefined reference to `firebase::g_auth_initializer'
:-1: ошибка: collect2.exe: error: ld returned 1 exit status

при этом firebase.cpp выглядит так:

#include "firebase.h"

Firebase::Firebase()
{

}
We recommend hosting TIMEWEB
We recommend hosting TIMEWEB
Stable hosting, on which the social network EVILEG is located. For projects on Django we recommend VDS hosting.

Do you like it? Share on social networks!

10
Михаиллл
  • May 3, 2020, 4:24 a.m.

Нашел в сдк дакой Cmake файл, может быть часть из него нужно добавлять в файл сборки проекта?

cmake_minimum_required(VERSION 3.1)

include(FindPkgConfig)

if (NOT DEFINED FIREBASE_CPP_SDK_DIR)
  set(FIREBASE_CPP_SDK_DIR ${CMAKE_CURRENT_SOURCE_DIR})
endif ()

# Determine the location of the libraries to use based on the platform.
if(ANDROID)
  string(REPLACE "_" ";" SPLIT_STL ${ANDROID_STL})
  list(GET SPLIT_STL 0 STL_DIR)
  set(FIREBASE_SDK_LIBDIR
      "${FIREBASE_CPP_SDK_DIR}/libs/android/${ANDROID_ABI}/${STL_DIR}")
elseif(APPLE)
  if(IOS)
    set(FIREBASE_SDK_LIBDIR ${FIREBASE_CPP_SDK_DIR}/libs/ios/universal)
  else() #Assume MacOS
    set(FIREBASE_SDK_LIBDIR ${FIREBASE_CPP_SDK_DIR}/libs/darwin/universal)
  endif()
elseif(MSVC)
  if(${CMAKE_CL_64})
    set(MSVC_CPU x64)
  else()
    set(MSVC_CPU x86)
  endif()
  if(CMAKE_BUILD_TYPE STREQUAL Release)
    set(MSVC_CONFIG Release)
  else()
    set(MSVC_CONFIG Debug)
  endif()
  set(MSVC_VS_VERSION VS2015)
  set(FIREBASE_SDK_LIBDIR
      ${FIREBASE_CPP_SDK_DIR}/libs/windows/${MSVC_VS_VERSION}/${MSVC_RUNTIME_MODE}/${MSVC_CPU}/${MSVC_CONFIG})
else()
  # The Firebase libraries are not built with glibcxx11, so disable the ABI.
  set(DISABLE_CXX11 TRUE)
  set(LINUX_CPU x86_64)
  set(FIREBASE_SDK_LIBDIR ${FIREBASE_CPP_SDK_DIR}/libs/linux/${LINUX_CPU})
endif()

# Defines a Firebase target, linking it with the correct prebuilt library.
function(add_firebase_target TARGET_NAME)
  if(NOT DEFINED ${TARGET_NAME})
    if(MSVC)
      set(LIBRARY_NAME "${TARGET_NAME}.lib")
    else()
      set(LIBRARY_NAME "lib${TARGET_NAME}.a")
    endif()
    add_library(${TARGET_NAME} STATIC IMPORTED GLOBAL)
    set_target_properties(${TARGET_NAME} PROPERTIES
      IMPORTED_LOCATION "${FIREBASE_SDK_LIBDIR}/${LIBRARY_NAME}"
      INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_CURRENT_LIST_DIR}/include"
    )
    if(${DISABLE_CXX11})
      set_target_properties(${TARGET_NAME} PROPERTIES
        INTERFACE_COMPILE_DEFINITIONS "_GLIBCXX_USE_CXX11_ABI=0"
      )
    endif()
  endif()
endfunction()

# Define targets for all the Firebase libraries
add_firebase_target(firebase_app)
add_firebase_target(firebase_admob)
add_firebase_target(firebase_analytics)
add_firebase_target(firebase_auth)
add_firebase_target(firebase_database)
add_firebase_target(firebase_dynamic_links)
add_firebase_target(firebase_firestore)
add_firebase_target(firebase_functions)
add_firebase_target(firebase_instance_id)
add_firebase_target(firebase_messaging)
add_firebase_target(firebase_performance)
add_firebase_target(firebase_remote_config)
add_firebase_target(firebase_storage)
add_firebase_target(firebase_testlab)

# Auth on Linux desktop has an additional dependency on libsecret,
# which needs to be added. If it cannot be found, we don't want to
# error, since the user might not be using auth, and the user will
# get a linker error if it is needed.
if(NOT APPLE AND NOT ANDROID AND UNIX)
  pkg_check_modules(LIBSECRET libsecret-1)

  if(NOT LIBSECRET_FOUND)
    message(WARNING "Unable to find libsecret, which is needed by Linux \
                     desktop implementations of Auth, Instance ID, and \
                     Remote Config. \
                     It can be installed on supported systems via: \
                     apt-get install libsecret-1-dev")
  else()
    set_target_properties(firebase_auth PROPERTIES
      INTERFACE_INCLUDE_DIRECTORIES "${LIBSECRET_INCLUDE_DIRS}"
      INTERFACE_LINK_LIBRARIES "${LIBSECRET_LIBRARIES}"
    )
    set_target_properties(firebase_instance_id PROPERTIES
      INTERFACE_INCLUDE_DIRECTORIES "${LIBSECRET_INCLUDE_DIRS}"
      INTERFACE_LINK_LIBRARIES "${LIBSECRET_LIBRARIES}"
    )
    set_target_properties(firebase_remote_config PROPERTIES
      INTERFACE_INCLUDE_DIRECTORIES "${LIBSECRET_INCLUDE_DIRS}"
      INTERFACE_LINK_LIBRARIES "${LIBSECRET_LIBRARIES}"
    )
  endif()
endif()
    Evgenii Legotckoi
    • May 3, 2020, 5:51 p.m.

    Ну я наткнулся в интернете вот на такую вещь

    LOCAL_STATIC_LIBRARIES := cocos2dx_static \
    firebase_analytics \
    firebase_auth \
    firebase_database \
    firebase_app
    

    Это вроде как правильная последовательность линковки библиотек при той ошибке. Я так понимаю, у вас скорее всего не слинкована библиотека firebase_auth

      Михаиллл
      • May 4, 2020, 3:13 a.m.

      Добавил это в про файл и получил такую ошибку

       ошибка: Assignment needs exactly one word on the left hand side.
      
        Evgenii Legotckoi
        • May 4, 2020, 3:17 a.m.

        Это не для pro файла, в pro файле это и не заработает. Это просто была информация. Может быть для CMake, может быть ещё для чего-то.
        Смысл в том, что там необходимо прилинковать необходимые бибилотеки. Я не знаю, как у вас там сделана линковка библиотек, да и каких именно также не знаю.
        Firebase тоже не собирал с Qt, просто исходя из той ошибки, делаю выводы о неправильной линковке.

          Михаиллл
          • May 4, 2020, 3:24 a.m.

          Я попробовал так линковать, но это не помогло.
          Нужно наверно попробовать Ваш вариант в симэйке

          LIBS += "E:/Programs/firebase_cpp_sdk/libs/windows/VS2015/MT/x64/Debug/firebase_admob.lib"
          LIBS += "E:/Programs/firebase_cpp_sdk/libs/windows/VS2015/MT/x64/Debug/firebase_analytics.lib"
          LIBS += "E:/Programs/firebase_cpp_sdk/libs/windows/VS2015/MT/x64/Debug/firebase_app.lib"
          LIBS += "E:/Programs/firebase_cpp_sdk/libs/windows/VS2015/MT/x64/Debug/firebase_auth.lib"
          LIBS += "E:/Programs/firebase_cpp_sdk/libs/windows/VS2015/MT/x64/Debug/firebase_database.lib"
          LIBS += "E:/Programs/firebase_cpp_sdk/libs/windows/VS2015/MT/x64/Debug/firebase_dynamic_links.lib"
          LIBS += "E:/Programs/firebase_cpp_sdk/libs/windows/VS2015/MT/x64/Debug/firebase_firestore.lib"
          LIBS += "E:/Programs/firebase_cpp_sdk/libs/windows/VS2015/MT/x64/Debug/firebase_functions.lib"
          LIBS += "E:/Programs/firebase_cpp_sdk/libs/windows/VS2015/MT/x64/Debug/firebase_instance_id.lib"
          LIBS += "E:/Programs/firebase_cpp_sdk/libs/windows/VS2015/MT/x64/Debug/firebase_messaging.lib"
          LIBS += "E:/Programs/firebase_cpp_sdk/libs/windows/VS2015/MT/x64/Debug/firebase_remote_config.lib"
          LIBS += "E:/Programs/firebase_cpp_sdk/libs/windows/VS2015/MT/x64/Debug/firebase_storage.lib"
          
            Evgenii Legotckoi
            • May 4, 2020, 3:26 a.m.

            Полагаю, вам ещё нужны заголовочные файлы, которые подключаются через INCLUDEPATH += ...

              Михаиллл
              • May 4, 2020, 3:29 a.m.

              Я их подключил в qmake так

              INCLUDEPATH += E:/Programs/firebase_cpp_sdk/include
              

              А как их подключить в Cmake?

                Evgenii Legotckoi
                • May 4, 2020, 3:32 a.m.

                В этой статье есть пример со статической библиотекой. Там проект не для Qt, а для обычного C++ проекта, но смысл, думаю, уловите.

                CMake проект с поддиректориями и статической библиотекой

                  Михаиллл
                  • May 4, 2020, 4:03 a.m.

                  Сделал в симэйке так, но тоже не работает

                  include_directories("E:/Programs/firebase_cpp_sdk/include")
                  LOCAL_STATIC_LIBRARIES := cocos2dx_static \
                  firebase_analytics \
                  firebase_auth \
                  firebase_database \
                  firebase_app
                  

                  выдает ошибку при компиляции

                  E:\QTProject\testFirebaseCmake\CMakeLists.txt:50: ошибка: Parse error.  Expected "(", got unquoted argument with text ":=".
                  
                    Михаиллл
                    • May 4, 2020, 4:21 a.m.

                    Попробовал так сделать в симэйке

                    include_directories("E:/Programs/firebase_cpp_sdk/include")
                    add_library(firebase_admob STATIC "E:/Programs/firebase_cpp_sdk/libs/windows/VS2015/MT/x64/Debug/firebase_admob.lib")
                    add_library(firebase_analytics STATIC "E:/Programs/firebase_cpp_sdk/libs/windows/VS2015/MT/x64/Debug/firebase_analytics.lib")
                    add_library(firebase_app STATIC "E:/Programs/firebase_cpp_sdk/libs/windows/VS2015/MT/x64/Debug/firebase_app.lib")
                    add_library(firebase_auth STATIC "E:/Programs/firebase_cpp_sdk/libs/windows/VS2015/MT/x64/Debug/firebase_auth.lib")
                    add_library(firebase_database STATIC "E:/Programs/firebase_cpp_sdk/libs/windows/VS2015/MT/x64/Debug/firebase_database.lib")
                    add_library(firebase_dynamic_links STATIC "E:/Programs/firebase_cpp_sdk/libs/windows/VS2015/MT/x64/Debug/firebase_dynamic_links.lib")
                    add_library(firebase_firestore STATIC ""E:/Programs/firebase_cpp_sdk/libs/windows/VS2015/MT/x64/Debug/firebase_firestore.lib")
                    add_library(firebase_functions STATIC "E:/Programs/firebase_cpp_sdk/libs/windows/VS2015/MT/x64/Debug/firebase_functions.lib")
                    add_library(firebase_instance_id STATIC "E:/Programs/firebase_cpp_sdk/libs/windows/VS2015/MT/x64/Debug/firebase_instance_id.lib")
                    add_library(firebase_messaging STATIC "E:/Programs/firebase_cpp_sdk/libs/windows/VS2015/MT/x64/Debug/firebase_messaging.lib")
                    add_library(firebase_remote_config STATIC "E:/Programs/firebase_cpp_sdk/libs/windows/VS2015/MT/x64/Debug/firebase_remote_config.lib")
                    add_library(firebase_storage STATIC "E:/Programs/firebase_cpp_sdk/libs/windows/VS2015/MT/x64/Debug/firebase_storage.lib")
                    
                    

                    и получил такие ошибки

                    E:\QTProject\testFirebaseCmake\CMakeLists.txt:66: ошибка: Parse error.  Function missing ending ")".  Instead found unterminated string with text ")
                    

                      Comments

                      Only authorized users can post comments.
                      Please, Log in or Sign up
                      AD

                      C ++ - Test 004. Pointers, Arrays and Loops

                      • Result:50points,
                      • Rating points-4
                      m

                      C ++ - Test 004. Pointers, Arrays and Loops

                      • Result:80points,
                      • Rating points4
                      m

                      C ++ - Test 004. Pointers, Arrays and Loops

                      • Result:20points,
                      • Rating points-10
                      Last comments
                      i
                      innorwallNov. 14, 2024, 8:07 p.m.
                      Circuit switching and packet data transmission networks Angioedema 1 priligy dapoxetine
                      i
                      innorwallNov. 14, 2024, 7:42 p.m.
                      How to Copy Files in Linux If only females relatives with DZ offspring were considered these percentages were 23 order priligy online uk
                      i
                      innorwallNov. 14, 2024, 5:09 p.m.
                      Qt/C++ - Tutorial 068. Hello World using the CMAKE build system in CLion ditropan pristiq dosing With the Yankees leading, 4 3, Rivera jogged in from the bullpen to a standing ovation as he prepared for his final appearance in Chicago buy priligy pakistan
                      i
                      innorwallNov. 14, 2024, 12:05 p.m.
                      EVILEG-CORE. Using Google reCAPTCHA 2001; 98 29 34 priligy buy
                      i
                      innorwallNov. 14, 2024, noon
                      PyQt5 - Lesson 007. Works with QML QtQuick (Signals and slots) priligy 30mg Am J Obstet Gynecol 171 1488 505
                      Now discuss on the forum
                      i
                      innorwallNov. 14, 2024, 11:39 a.m.
                      добавить qlineseries в функции priligy amazon canada 93 GREB1 protein GREB1 AB011147 6
                      i
                      innorwallNov. 11, 2024, 6:55 p.m.
                      Всё ещё разбираюсь с кешем. priligy walgreens levitra dulcolax carbs The third ring was found to be made up of ultra relativistic electrons, which are also present in both the outer and inner rings
                      9
                      9AnonimOct. 25, 2024, 4:10 p.m.
                      Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…

                      Follow us in social networks