Михаиллл
2 мая 2020 г. 21:35

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

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

  1. INCLUDEPATH += E:/Programs/firebase_cpp_sdk/include

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

  1. #include "firebase/auth.h"

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

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

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

  1. #include "firebase.h"
  2.  
  3. Firebase::Firebase()
  4. {
  5.  
  6. }
2

Вам это нравится? Поделитесь в социальных сетях!

10
Михаиллл
  • 3 мая 2020 г. 14:24

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

  1. cmake_minimum_required(VERSION 3.1)
  2.  
  3. include(FindPkgConfig)
  4.  
  5. if (NOT DEFINED FIREBASE_CPP_SDK_DIR)
  6. set(FIREBASE_CPP_SDK_DIR ${CMAKE_CURRENT_SOURCE_DIR})
  7. endif ()
  8.  
  9. # Determine the location of the libraries to use based on the platform.
  10. if(ANDROID)
  11. string(REPLACE "_" ";" SPLIT_STL ${ANDROID_STL})
  12. list(GET SPLIT_STL 0 STL_DIR)
  13. set(FIREBASE_SDK_LIBDIR
  14. "${FIREBASE_CPP_SDK_DIR}/libs/android/${ANDROID_ABI}/${STL_DIR}")
  15. elseif(APPLE)
  16. if(IOS)
  17. set(FIREBASE_SDK_LIBDIR ${FIREBASE_CPP_SDK_DIR}/libs/ios/universal)
  18. else() #Assume MacOS
  19. set(FIREBASE_SDK_LIBDIR ${FIREBASE_CPP_SDK_DIR}/libs/darwin/universal)
  20. endif()
  21. elseif(MSVC)
  22. if(${CMAKE_CL_64})
  23. set(MSVC_CPU x64)
  24. else()
  25. set(MSVC_CPU x86)
  26. endif()
  27. if(CMAKE_BUILD_TYPE STREQUAL Release)
  28. set(MSVC_CONFIG Release)
  29. else()
  30. set(MSVC_CONFIG Debug)
  31. endif()
  32. set(MSVC_VS_VERSION VS2015)
  33. set(FIREBASE_SDK_LIBDIR
  34. ${FIREBASE_CPP_SDK_DIR}/libs/windows/${MSVC_VS_VERSION}/${MSVC_RUNTIME_MODE}/${MSVC_CPU}/${MSVC_CONFIG})
  35. else()
  36. # The Firebase libraries are not built with glibcxx11, so disable the ABI.
  37. set(DISABLE_CXX11 TRUE)
  38. set(LINUX_CPU x86_64)
  39. set(FIREBASE_SDK_LIBDIR ${FIREBASE_CPP_SDK_DIR}/libs/linux/${LINUX_CPU})
  40. endif()
  41.  
  42. # Defines a Firebase target, linking it with the correct prebuilt library.
  43. function(add_firebase_target TARGET_NAME)
  44. if(NOT DEFINED ${TARGET_NAME})
  45. if(MSVC)
  46. set(LIBRARY_NAME "${TARGET_NAME}.lib")
  47. else()
  48. set(LIBRARY_NAME "lib${TARGET_NAME}.a")
  49. endif()
  50. add_library(${TARGET_NAME} STATIC IMPORTED GLOBAL)
  51. set_target_properties(${TARGET_NAME} PROPERTIES
  52. IMPORTED_LOCATION "${FIREBASE_SDK_LIBDIR}/${LIBRARY_NAME}"
  53. INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_CURRENT_LIST_DIR}/include"
  54. )
  55. if(${DISABLE_CXX11})
  56. set_target_properties(${TARGET_NAME} PROPERTIES
  57. INTERFACE_COMPILE_DEFINITIONS "_GLIBCXX_USE_CXX11_ABI=0"
  58. )
  59. endif()
  60. endif()
  61. endfunction()
  62.  
  63. # Define targets for all the Firebase libraries
  64. add_firebase_target(firebase_app)
  65. add_firebase_target(firebase_admob)
  66. add_firebase_target(firebase_analytics)
  67. add_firebase_target(firebase_auth)
  68. add_firebase_target(firebase_database)
  69. add_firebase_target(firebase_dynamic_links)
  70. add_firebase_target(firebase_firestore)
  71. add_firebase_target(firebase_functions)
  72. add_firebase_target(firebase_instance_id)
  73. add_firebase_target(firebase_messaging)
  74. add_firebase_target(firebase_performance)
  75. add_firebase_target(firebase_remote_config)
  76. add_firebase_target(firebase_storage)
  77. add_firebase_target(firebase_testlab)
  78.  
  79. # Auth on Linux desktop has an additional dependency on libsecret,
  80. # which needs to be added. If it cannot be found, we don't want to
  81. # error, since the user might not be using auth, and the user will
  82. # get a linker error if it is needed.
  83. if(NOT APPLE AND NOT ANDROID AND UNIX)
  84. pkg_check_modules(LIBSECRET libsecret-1)
  85.  
  86. if(NOT LIBSECRET_FOUND)
  87. message(WARNING "Unable to find libsecret, which is needed by Linux \
  88. desktop implementations of Auth, Instance ID, and \
  89. Remote Config. \
  90. It can be installed on supported systems via: \
  91. apt-get install libsecret-1-dev")
  92. else()
  93. set_target_properties(firebase_auth PROPERTIES
  94. INTERFACE_INCLUDE_DIRECTORIES "${LIBSECRET_INCLUDE_DIRS}"
  95. INTERFACE_LINK_LIBRARIES "${LIBSECRET_LIBRARIES}"
  96. )
  97. set_target_properties(firebase_instance_id PROPERTIES
  98. INTERFACE_INCLUDE_DIRECTORIES "${LIBSECRET_INCLUDE_DIRS}"
  99. INTERFACE_LINK_LIBRARIES "${LIBSECRET_LIBRARIES}"
  100. )
  101. set_target_properties(firebase_remote_config PROPERTIES
  102. INTERFACE_INCLUDE_DIRECTORIES "${LIBSECRET_INCLUDE_DIRS}"
  103. INTERFACE_LINK_LIBRARIES "${LIBSECRET_LIBRARIES}"
  104. )
  105. endif()
  106. endif()
    Evgenii Legotckoi
    • 4 мая 2020 г. 3:51

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

    1. LOCAL_STATIC_LIBRARIES := cocos2dx_static \
    2. firebase_analytics \
    3. firebase_auth \
    4. firebase_database \
    5. firebase_app

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

      Михаиллл
      • 4 мая 2020 г. 13:13

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

      1. ошибка: Assignment needs exactly one word on the left hand side.
        Evgenii Legotckoi
        • 4 мая 2020 г. 13:17

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

          Михаиллл
          • 4 мая 2020 г. 13:24

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

          1. LIBS += "E:/Programs/firebase_cpp_sdk/libs/windows/VS2015/MT/x64/Debug/firebase_admob.lib"
          2. LIBS += "E:/Programs/firebase_cpp_sdk/libs/windows/VS2015/MT/x64/Debug/firebase_analytics.lib"
          3. LIBS += "E:/Programs/firebase_cpp_sdk/libs/windows/VS2015/MT/x64/Debug/firebase_app.lib"
          4. LIBS += "E:/Programs/firebase_cpp_sdk/libs/windows/VS2015/MT/x64/Debug/firebase_auth.lib"
          5. LIBS += "E:/Programs/firebase_cpp_sdk/libs/windows/VS2015/MT/x64/Debug/firebase_database.lib"
          6. LIBS += "E:/Programs/firebase_cpp_sdk/libs/windows/VS2015/MT/x64/Debug/firebase_dynamic_links.lib"
          7. LIBS += "E:/Programs/firebase_cpp_sdk/libs/windows/VS2015/MT/x64/Debug/firebase_firestore.lib"
          8. LIBS += "E:/Programs/firebase_cpp_sdk/libs/windows/VS2015/MT/x64/Debug/firebase_functions.lib"
          9. LIBS += "E:/Programs/firebase_cpp_sdk/libs/windows/VS2015/MT/x64/Debug/firebase_instance_id.lib"
          10. LIBS += "E:/Programs/firebase_cpp_sdk/libs/windows/VS2015/MT/x64/Debug/firebase_messaging.lib"
          11. LIBS += "E:/Programs/firebase_cpp_sdk/libs/windows/VS2015/MT/x64/Debug/firebase_remote_config.lib"
          12. LIBS += "E:/Programs/firebase_cpp_sdk/libs/windows/VS2015/MT/x64/Debug/firebase_storage.lib"
            Evgenii Legotckoi
            • 4 мая 2020 г. 13:26

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

              Михаиллл
              • 4 мая 2020 г. 13:29

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

              1. INCLUDEPATH += E:/Programs/firebase_cpp_sdk/include

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

                Evgenii Legotckoi
                • 4 мая 2020 г. 13:32

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

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

                  Михаиллл
                  • 4 мая 2020 г. 14:03

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

                  1. include_directories("E:/Programs/firebase_cpp_sdk/include")
                  2. LOCAL_STATIC_LIBRARIES := cocos2dx_static \
                  3. firebase_analytics \
                  4. firebase_auth \
                  5. firebase_database \
                  6. firebase_app

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

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

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

                    1. include_directories("E:/Programs/firebase_cpp_sdk/include")
                    2. add_library(firebase_admob STATIC "E:/Programs/firebase_cpp_sdk/libs/windows/VS2015/MT/x64/Debug/firebase_admob.lib")
                    3. add_library(firebase_analytics STATIC "E:/Programs/firebase_cpp_sdk/libs/windows/VS2015/MT/x64/Debug/firebase_analytics.lib")
                    4. add_library(firebase_app STATIC "E:/Programs/firebase_cpp_sdk/libs/windows/VS2015/MT/x64/Debug/firebase_app.lib")
                    5. add_library(firebase_auth STATIC "E:/Programs/firebase_cpp_sdk/libs/windows/VS2015/MT/x64/Debug/firebase_auth.lib")
                    6. add_library(firebase_database STATIC "E:/Programs/firebase_cpp_sdk/libs/windows/VS2015/MT/x64/Debug/firebase_database.lib")
                    7. add_library(firebase_dynamic_links STATIC "E:/Programs/firebase_cpp_sdk/libs/windows/VS2015/MT/x64/Debug/firebase_dynamic_links.lib")
                    8. add_library(firebase_firestore STATIC ""E:/Programs/firebase_cpp_sdk/libs/windows/VS2015/MT/x64/Debug/firebase_firestore.lib")
                    9. add_library(firebase_functions STATIC "E:/Programs/firebase_cpp_sdk/libs/windows/VS2015/MT/x64/Debug/firebase_functions.lib")
                    10. add_library(firebase_instance_id STATIC "E:/Programs/firebase_cpp_sdk/libs/windows/VS2015/MT/x64/Debug/firebase_instance_id.lib")
                    11. add_library(firebase_messaging STATIC "E:/Programs/firebase_cpp_sdk/libs/windows/VS2015/MT/x64/Debug/firebase_messaging.lib")
                    12. add_library(firebase_remote_config STATIC "E:/Programs/firebase_cpp_sdk/libs/windows/VS2015/MT/x64/Debug/firebase_remote_config.lib")
                    13. add_library(firebase_storage STATIC "E:/Programs/firebase_cpp_sdk/libs/windows/VS2015/MT/x64/Debug/firebase_storage.lib")
                    14.  

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

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

                      Комментарии

                      Только авторизованные пользователи могут публиковать комментарии.
                      Пожалуйста, авторизуйтесь или зарегистрируйтесь
                      • Последние комментарии
                      • Evgenii Legotckoi
                        16 апреля 2025 г. 17:08
                        Благодарю за отзыв. И вам желаю всяческих успехов!
                      • IscanderChe
                        12 апреля 2025 г. 17:12
                        Добрый день. Спасибо Вам за этот проект и отдельно за ответы на форуме, которые мне очень помогли в некоммерческих пет-проектах. Профессиональным программистом я так и не стал, но узнал мно…
                      • AK
                        1 апреля 2025 г. 11:41
                        Добрый день. В данный момент работаю над проектом, где необходимо выводить звук из программы в определенное аудиоустройство (колонки, наушники, виртуальный кабель и т.д). Пишу на Qt5.12.12 поско…
                      • Evgenii Legotckoi
                        9 марта 2025 г. 21:02
                        К сожалению, я этого подсказать не могу, поскольку у меня нет необходимости в обходе блокировок и т.д. Поэтому я и не задавался решением этой проблемы. Ну выглядит так, что вам действитель…
                      • VP
                        9 марта 2025 г. 16:14
                        Здравствуйте! Я устанавливал Qt6 из исходников а также Qt Creator по отдельности. Все компоненты, связанные с разработкой для Android, установлены. Кроме одного... Когда пытаюсь скомпилиров…