Интеграция mon go -cxx-драйвера с использованием CMake в C ++ Project - PullRequest
0 голосов
/ 12 апреля 2020

Я пытаюсь интегрировать базу данных mon go в мое приложение проекта C ++. Я собрал драйвер mon go db cxx в соответствии с инструкциями, приведенными здесь по этой ссылке http://mongocxx.org/mongocxx-v3/installation/

Теперь у меня есть код драйвера mongocxx для обеих станций: stati c и общих библиотек , Я связываю библиотеки stati c для моего приложения C ++ и скопировал папку драйвера mongocxx в мой проект. Я пытался написать Cmake для mongocxx и bsoncxx для связи с моим C ++ приложением, но где-то это не удалось. Структура моего проекта и содержимое cmake следующие:

Структура папок

mongo_db_driver
   include
      bsoncxx
         v_noabi
      mongocxx
         v_noabi
   lib
     bsoncxx-static.lib
     mongocxx-static.lib

main.cpp
CMakeLists.txt 

Findmongocxx.cmake

SET ( LOCATE_mongocxx  ${CMAKE_CURRENT_LIST_DIR} )

find_path ( mongocxx_headers    mongocxx/client.hpp
                                mongocxx/instance.hpp
        PATH_SUFFIXES           include/mongocxx/v_noabi
        PATHS ${LOCATE_mongocxx}
        )

find_library ( mongocxx_library
        NAMES mongocxx-static
        PATH_SUFFIXES lib
        PATHS ${LOCATE_mongocxx}
        )

Findbsoncxx.cmake

SET ( LOCATE_bsoncxx  ${CMAKE_CURRENT_LIST_DIR} )

find_path ( bsoncxx_headers     bsoncxx/builder/stream/document.hpp
                                bsoncxx/json.hpp
        PATH_SUFFIXES           include/bsoncxx/v_noabi
        PATHS ${LOCATE_bsoncxx}
        )

find_library ( bsoncxx_library
                NAMES bsoncxx-static
        PATH_SUFFIXES lib
        PATHS ${LOCATE_bsoncxx}
        )

И мой CMakeLists.txt, как показано ниже

cmake_minimum_required(VERSION 3.15)
project(enabler_app)

set(CMAKE_CXX_STANDARD 20)

list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}/mongo_db_driver)

set(EXECUTABLES
        main.cpp
        )

add_executable(enabler_app ${EXECUTABLES}
        )


find_package(mongocxx REQUIRED)
include_directories(${mongocxx_headers})
target_link_libraries(${PROJECT_NAME} ${mongocxx_library}  )


find_package(bsoncxx REQUIRED)
include_directories(${bsoncxx_headers})
target_link_libraries(${PROJECT_NAME} ${bsoncxx_library}  )

CMakeLists.txt, загружен без каких-либо ошибок, но когда я пытаюсь создать свое приложение, он выдает undefined_reference для всех методов, доступных в драйвере mongocxx. например, ниже несколько

main.cpp:10: undefined reference to `__imp__ZN8mongocxx7v_noabi8instanceC1Ev'
main.cpp:11: undefined reference to `__imp__ZN8mongocxx7v_noabi3uri13k_default_uriB5cxx11E'

My main. cpp содержит код, который доступен в приведенных выше инструкциях на сайте MongoDB, а также

#include <iostream>

#include <bsoncxx/builder/stream/document.hpp>
#include <bsoncxx/json.hpp>

#include <mongocxx/client.hpp>
#include <mongocxx/instance.hpp>

int main(int, char**) {
    mongocxx::instance inst{};
    mongocxx::client conn{mongocxx::uri{}};

    bsoncxx::builder::stream::document document{};

    auto collection = conn["testdb"]["testcollection"];
    document << "hello" << "world";

    collection.insert_one(document.view());
    auto cursor = collection.find({});

    for (auto&& doc : cursor) {
        std::cout << bsoncxx::to_json(doc) << std::endl;
    }
}
...