Возникли проблемы с добавлением Firebase в мой проект C ++ - PullRequest
0 голосов
/ 11 февраля 2019

Поэтому я пытался использовать C ++ Firebase API для хранения данных из моего приложения C ++ в облаке Google (firebase).Это моя цель.

Я написал необходимый код для него, основываясь на моем понимании с этого сайта: https://firebase.google.com/docs/database/cpp/start и этого сайта: https://firebase.google.com/docs/cpp/setup

Эти веб-сайты дают вам некоторое представление о том, как вы можете добавить FirebaseAPI для моего приложения C ++.Заголовочные файлы или Firebase SDK взяты со второго сайта.

Поэтому я использую iMac и Visual Studio, и я попытался запустить свой код, но у меня появились следующие ошибки:

././include/firebase/./database/database_reference.h:107:25: warning: 'override' keyword is a C++11 extension [-Wc++11-extensions]
  bool is_valid() const override;
                        ^
1 warning generated.
Undefined symbols for architecture x86_64:
  "firebase::App::Create(firebase::AppOptions const&)", referenced from:
      _main in test-1dd10f.o
  "firebase::Variant::Clear(firebase::Variant::Type)", referenced from:
      firebase::Variant::set_int64_value(long long) in test-1dd10f.o
      firebase::Variant::~Variant() in test-1dd10f.o
  "firebase::database::DatabaseReference::SetValue(firebase::Variant)", referenced from:
      _main in test-1dd10f.o
  "firebase::database::DatabaseReference::~DatabaseReference()", referenced from:
      _main in test-1dd10f.o
  "firebase::database::Database::GetInstance(firebase::App*, firebase::InitResult*)", referenced from:
      _main in test-1dd10f.o
  "firebase::database::DatabaseReference::Child(char const*) const", referenced from:
      _main in test-1dd10f.o
  "firebase::database::Database::GetReference(char const*) const", referenced from:
      _main in test-1dd10f.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Кстати, мне пришлось изменить некоторые пути некоторых заголовочных файлов, потому что каким-то образом, когда я компилирую файл, я получаю сообщение об ошибке «файл не найден».Я имею в виду, я полагаю, что я не собираюсь менять исходный путь от заголовочных файлов firebase или SDK до того, что мне нужно (возможно, я ошибаюсь).

Например, если у меня есть файл myapp.cpp втот же каталог, что и папка firebase, в которой находятся все заголовочные файлы, я могу просто добавить заголовочный файл app.h, например, #include "firebase/app.h".Но некоторые из этих заголовочных файлов включают в себя другие заголовочные файлы, которые, как показано ниже «#include firebase / internal / common.h», вызвали у меня file not found error.Поэтому мне пришлось изменить путь к этим заголовочным файлам на что-то вроде "#include" ../internal/common.h ". Не думаю, что это тоже проблема.

Не знаюЯ очень хорошо знаю C ++. Но я думаю, что это проблема среды, и я не знаю, что делать.

Я не выполнил шаги, связанные с Pod (на веб-сайте), потому что не знаюзнать, если это необходимо, или я не понимаю инструкции ясно.

#include <iostream>
#include "./include/firebase/app.h"
#include "./include/firebase/database.h"

using namespace std;
using namespace firebase;
using namespace database;

int main () {

    ::firebase::AppOptions appOptions =  ::firebase::AppOptions();
    appOptions.set_api_key("AIzaSyDocIMJCv9ZfPq8ozvkeSc5PlC-X5gW5_k");
    appOptions.set_app_id("smarttrafficmonitoring.firebaseapp.com");
    appOptions.set_database_url("https://smarttrafficmonitoring.firebaseio.com");
    appOptions.set_project_id("smarttrafficmonitoring");
    appOptions.set_storage_bucket("smarttrafficmonitoring.appspot.com");
    appOptions.set_messaging_sender_id("220108272524");

    ::firebase::App* app;
    app = ::firebase::App::Create(appOptions);
    ::firebase::database::Database *database = ::firebase::database::Database::GetInstance(app); 
    firebase::database::DatabaseReference dbref = database->GetReference("intersections");
    dbref.Child("intersection").Child("NSLane").Child("mid").SetValue(11);
    cout << "It worked";
    return 0;
}

1 Ответ

0 голосов
/ 05 июня 2019

Для цели Дарвина (macOS) вам не нужно использовать кокоаподы.Взяв последний C ++ SDK в VSCode, я смог собрать ваш пример на своем Mac.Мой файл CMakeLists.txt (я предполагаю, что именно так настраивается ваш проект, если вы не используете XCode):

cmake_minimum_required(VERSION 3.1)
project(test_project)

set(FIREBASE_CPP_SDK_DIR ${CMAKE_CURRENT_SOURCE_DIR}/firebase_cpp_sdk)
add_subdirectory(firebase_cpp_sdk)

add_executable(test_project main.cpp)
target_link_libraries(test_project firebase_app firebase_database)

main.cpp - предоставленный вами файл.Я поместил исходники Firebase C ++ в каталог с именем firebase_cpp_sdk.Я также внес небольшие изменения в способ импорта заголовков:

#include <iostream>
#include <firebase/app.h>
#include <firebase/database.h>

. Это зависит от того, как я настроил свой файл CMakeLists.txt.

Важные замечания, которые могут помочь: я получаюошибки компоновщика только с add_subdirectory, set для FIREBASE_CPP_SDK_DIR работает вокруг них, убедившись, что у меня есть правильный абсолютный путь к файлу Firebase CMakeLists.txt.В target_link_libraries я обязательно добавлю ссылку firebase_app в дополнение к firebase_database.Без них я получаю похожие ошибки компоновщика с вашими.Относительно того, какие библиотеки нужно связать, я ссылался на репозиторий с открытым исходным кодом: https://github.com/firebase/firebase-cpp-sdk

Еще одно замечание: если вы связываете библиотеки вручную (то есть: не через системы CMake), я заметил, что ваш компоновщик ошибаетсяконкретно ссылаются на архитектуру x86_64.Похоже, что CMake предпочитает файлы .a в libs/darwin/universal, поэтому я бы попробовал сначала, но вы также можете попробовать каталог /libs/darwin/x86_64, чтобы посмотреть, поможет ли это вообще.

Надеюсь, это откроет вас.!

И последнее замечание: поддержка SDK для настольных компьютеров - это довольно бета-версия. Если вы столкнулись с ошибками после установки, не стесняйтесь регистрировать их на трекере ошибок GitHub: https://github.com/firebase/firebase-cpp-sdk/issues

Я надеюсь, что все помогает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...