Михаиллл
Михаиллл2. Mai 2020 11:35

Как в 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()
{

}
Рекомендуємо хостинг TIMEWEB
Рекомендуємо хостинг TIMEWEB
Stabiles Hosting des sozialen Netzwerks EVILEG. Wir empfehlen VDS-Hosting für Django-Projekte.

Magst du es? In sozialen Netzwerken teilen!

10
Михаиллл
  • 3. Mai 2020 04:24

Нашел в сдк дакой 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()

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

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

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

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

       ошибка: Assignment needs exactly one word on the left hand side.
      

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

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

          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"
          

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

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

              INCLUDEPATH += E:/Programs/firebase_cpp_sdk/include
              

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

                Evgenii Legotckoi
                • 4. Mai 2020 03:32

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

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

                  Михаиллл
                  • 4. Mai 2020 04:03

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

                  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 ":=".
                  
                    Михаиллл
                    • 4. Mai 2020 04:21

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

                    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 ")
                    

                      Kommentare

                      Nur autorisierte Benutzer können Kommentare posten.
                      Bitte Anmelden oder Registrieren
                      Letzte Kommentare
                      A
                      ALO1ZE19. Oktober 2024 08:19
                      Fb3-Dateileser auf Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
                      ИМ
                      Игорь Максимов5. Oktober 2024 07:51
                      Django – Lektion 064. So schreiben Sie eine Python-Markdown-Erweiterung Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
                      d
                      dblas55. Juli 2024 11:02
                      QML - Lektion 016. SQLite-Datenbank und das Arbeiten damit in QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
                      k
                      kmssr8. Februar 2024 18:43
                      Qt Linux - Lektion 001. Autorun Qt-Anwendung unter Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
                      Qt WinAPI - Lektion 007. Arbeiten mit ICMP-Ping in Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
                      Jetzt im Forum diskutieren
                      J
                      JacobFib17. Oktober 2024 03:27
                      добавить qlineseries в функции Пользователь может получить любые разъяснения по интересующим вопросам, касающимся обработки его персональных данных, обратившись к Оператору с помощью электронной почты https://topdecorpro.ru…
                      JW
                      Jhon Wick1. Oktober 2024 15:52
                      Indian Food Restaurant In Columbus OH| Layla’s Kitchen Indian Restaurant If you're looking for a truly authentic https://www.laylaskitchenrestaurantohio.com/ , Layla’s Kitchen Indian Restaurant is your go-to destination. Located at 6152 Cleveland Ave, Colu…
                      КГ
                      Кирилл Гусарев27. September 2024 09:09
                      Не запускается программа на Qt: точка входа в процедуру не найдена в библиотеке DLL Написал программу на C++ Qt в Qt Creator, сбилдил Release с помощью MinGW 64-bit, бинарнику напихал dll-ки с помощью windeployqt.exe. При попытке запуска моей сбилженной программы выдаёт три оши…
                      F
                      Fynjy22. Juli 2024 04:15
                      при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …

                      Folgen Sie uns in sozialen Netzwerken