Михаиллл
Михаиллл02 травня 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
Стабільний хостинг, на якому розміщується соціальна мережа EVILEG. Для проектів на Django радимо VDS хостинг.

Вам це подобається? Поділіться в соціальних мережах!

10
Михаиллл
  • 03 травня 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()
    Evgenii Legotckoi
    • 03 травня 2020 р. 17:51

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

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

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

      Михаиллл
      • 04 травня 2020 р. 03:13

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

       ошибка: Assignment needs exactly one word on the left hand side.
      
        Evgenii Legotckoi
        • 04 травня 2020 р. 03:17

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

          Михаиллл
          • 04 травня 2020 р. 03:24

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

          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
            • 04 травня 2020 р. 03:26

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

              Михаиллл
              • 04 травня 2020 р. 03:29

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

              INCLUDEPATH += E:/Programs/firebase_cpp_sdk/include
              

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

                Evgenii Legotckoi
                • 04 травня 2020 р. 03:32

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

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

                  Михаиллл
                  • 04 травня 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 ":=".
                  
                    Михаиллл
                    • 04 травня 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 ")
                    

                      Коментарі

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

                      C++ - Тест 004. Указатели, Массивы и Циклы

                      • Результат:50бали,
                      • Рейтинг балів-4
                      m
                      • molni99
                      • 26 жовтня 2024 р. 08:37

                      C++ - Тест 004. Указатели, Массивы и Циклы

                      • Результат:80бали,
                      • Рейтинг балів4
                      m
                      • molni99
                      • 26 жовтня 2024 р. 08:29

                      C++ - Тест 004. Указатели, Массивы и Циклы

                      • Результат:20бали,
                      • Рейтинг балів-10
                      Останні коментарі
                      ИМ
                      Игорь Максимов22 листопада 2024 р. 19:51
                      Django - Підручник 017. Налаштуйте сторінку входу до Django Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
                      Evgenii Legotckoi
                      Evgenii Legotckoi31 жовтня 2024 р. 21:37
                      Django - Урок 064. Як написати розширення для Python Markdown Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup
                      A
                      ALO1ZE19 жовтня 2024 р. 15:19
                      Читалка файлів fb3 на Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
                      ИМ
                      Игорь Максимов05 жовтня 2024 р. 14:51
                      Django - Урок 064. Як написати розширення для Python Markdown Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
                      d
                      dblas505 липня 2024 р. 18:02
                      QML - Урок 016. База даних SQLite та робота з нею в QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
                      Тепер обговоріть на форумі
                      Evgenii Legotckoi
                      Evgenii Legotckoi24 червня 2024 р. 22:11
                      добавить qlineseries в функции Я тут. Работы оень много. Отправил его в бан.
                      t
                      tonypeachey115 листопада 2024 р. 14:04
                      google domain [url=https://google.com/]domain[/url] domain [http://www.example.com link title]
                      NSProject
                      NSProject04 червня 2022 р. 10:49
                      Всё ещё разбираюсь с кешем. В следствии прочтения данной статьи. Я принял для себя решение сделать кеширование свойств менеджера модели LikeDislike. И так как установка evileg_core для меня не была возможна, ибо он писался…
                      9
                      9Anonim25 жовтня 2024 р. 16:10
                      Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…

                      Слідкуйте за нами в соціальних мережах