Драйвер mongodb C++ на ubuntu

Я пытаюсь протестировать драйвер mongodb C++ на Ubuntu 16.04.

Драйвер установлен в ${Devfolder}/sdk/mongodb/ и тест находится в ${Devfolder}/testMongoDb/.

Код был скомпилирован и протестирован с использованием:

export PKG_CONFIG_PATH=${Devfolder}/sdk/mongodb/lib/pkgconfig
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${Devfolder}/sdk/mongodb/lib
c++ --std=c++11 test.cpp -o test $(pkg-config --cflags --libs libmongocxx)

Затем я хочу использовать драйвер mongodb в моем проекте CMake.

ugitho@ugitho:projects$ tree -L 3
.
├── sdk
│   └── mongodb
│       ├── bin
│       ├── include
│       ├── lib
│       └── share
├── testMongo
│   ├── a.out
│   ├── build
│   │   ├── CMakeCache.txt
│   │   ├── CMakeFiles
│   │   ├── cmake_install.cmake
│   │   ├── cmongodb
│   │   └── Makefile
│   ├── CMakeLists.txt
│   ├── test
│   └── test.cpp

Но я получил следующую ошибку:

    ugitho@ugitho:build$ cmake ..
    LIBMONGOCXX_INCLUDE_DIRS = /home/ugitho/NGUYENKHAC/projects/sdk/mongodb/include/mongocxx/v_noabi;/home/ugitho/NGUYENKHAC/projects/sdk/mongodb/include/bsoncxx/v_noabi
    LIBMONGOCXX_LIBRARIES = LIBMONGOCXX_LIBRARY_PATH-NOTFOUND;LIBBSONCXX_LIBRARY_PATH-NOTFOUND
    LIBBSONCXX_INCLUDE_DIRS = /home/ugitho/NGUYENKHAC/projects/sdk/mongodb/include/bsoncxx/v_noabi
    LIBBSONCXX_LIBRARIES = LIBBSONCXX_LIBRARY_PATH-NOTFOUND
    CMake Error: The following variables are used in this project, but they are set to NOTFOUND.
    Please set them or make sure they are set and tested correctly in the CMake files:
    LIBBSONCXX_LIBRARY_PATH
        linked by target "cmongodb" in directory 
/home/ugitho/NGUYENKHAC/projects/testMongoDb
        linked by target "cmongodb" in directory 
/home/ugitho/NGUYENKHAC/projects/testMongoDb
    LIBMONGOCXX_LIBRARY_PATH
        linked by target "cmongodb" in directory 
/home/ugitho/NGUYENKHAC/projects/testMongoDb

    -- Configuring incomplete, errors occurred!
    See also "/home/ugitho/NGUYENKHAC/projects/testMongoDb/build/CMakeFiles/CMakeOutput.log".

отредактировано *:

Вот CMakeLists.txt и test.cpp.

CMakeLists.txt:

cmake_minimum_required(VERSION 3.2)
project(cmongodb)

set(CMAKE_CXX_STANDARD 14)

set(CMAKE_PREFIX_PATH /home/ugitho/NGUYENKHAC/projects/sdk/mongodb)

#find_package(libmongocxx REQUIRED)
#find_package(libbsoncxx REQUIRED)

find_package(PkgConfig REQUIRED)

pkg_check_modules(LIBMONGOCXX REQUIRED libmongocxx)
pkg_check_modules(LIBBSONCXX REQUIRED libbsoncxx)
message("LIBMONGOCXX_INCLUDE_DIRS = ${LIBMONGOCXX_INCLUDE_DIRS}")
message("LIBMONGOCXX_LIBRARIES = ${LIBMONGOCXX_LIBRARIES}")

message("LIBBSONCXX_INCLUDE_DIRS = ${LIBBSONCXX_INCLUDE_DIRS}")
message("LIBBSONCXX_LIBRARIES = ${LIBBSONCXX_LIBRARIES}")

set(COMMON_LIBRARIES ${LIBMONGOCXX_LIBRARIES} ${LIBBSONCXX_LIBRARIES})

set(SOURCE_FILES test.cpp)

add_executable(cmongodb ${SOURCE_FILES})
target_include_directories(cmongodb PUBLIC ${LIBMONGOCXX_INCLUDE_DIRS})
target_include_directories(cmongodb PUBLIC ${LIBBSONCXX_INCLUDE_DIRS})
target_link_libraries(cmongodb ${COMMON_LIBRARIES})

test.cpp:

#include <iostream>
#include <bsoncxx/builder/stream/document.hpp>
#include <bsoncxx/json.hpp>
#include <mongocxx/client.hpp>
#include <mongocxx/instance.hpp>

int main(int, char **) {
  std::cout << "1" << std::endl;
  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;
  }
  return 0;
}

Вы хоть представляете, что я здесь пропустил?

Обновления:

с новым CMakeLists.txt ошибок cmake больше нет.

ugitho@ugitho:build$ cmake ..
-- Checking for module 'libmongocxx'
--   Found libmongocxx, version 3.4.0
-- Checking for module 'libbsoncxx'
--   Found libbsoncxx, version 3.4.0
CMAKE_PREFIX_PATH = /home/ugitho/NGUYENKHAC/projects/sdk/mongodb/shared
LIBMONGOCXX_INCLUDE_DIRS = /home/ugitho/NGUYENKHAC/projects/sdk/mongodb/include/mongocxx/v_noabi;/home/ugitho/NGUYENKHAC/projects/sdk/mongodb/include/bsoncxx/v_noabi
LIBMONGOCXX_LIBRARIES = mongocxx;bsoncxx
LIBBSONCXX_INCLUDE_DIRS = /home/ugitho/NGUYENKHAC/projects/sdk/mongodb/include/bsoncxx/v_noabi
LIBBSONCXX_LIBRARIES = bsoncxx
-- Configuring done
-- Generating done
-- Build files have been written to: /home/ugitho/NGUYENKHAC/projects/testMongoDb/build
[1]+  Done                    gedit /home/ugitho/NGUYENKHAC/projects/testMongoDb/build/CMakeFiles/CMakeOutput.log

Теперь ошибки находятся на уровне make:

ugitho@ugitho:build$ make
Scanning dependencies of target cmongodb
[ 50%] Building CXX object CMakeFiles/cmongodb.dir/test.cpp.o
[100%] Linking CXX executable cmongodb
/opt/llvm/x86_64/6.0.0.g631a/bin/ld: error: unable to find library -lmongocxx
/opt/llvm/x86_64/6.0.0.g631a/bin/ld: error: unable to find library -lbsoncxx
/opt/llvm/x86_64/6.0.0.g631a/bin/ld: error: unable to find library -lbsoncxx
collect2: error: ld returned 1 exit status
make[2]: *** [cmongodb] Error 1
make[1]: *** [CMakeFiles/cmongodb.dir/all] Error 2
make: *** [all] Error 2

ОБНОВЛЕНИЕ *** 27/12/2018

cmake_minimum_required(VERSION 3.2)
project(cmongodb)

set(CMAKE_CXX_STANDARD 14)
get_filename_component(PARENT_DIR ${CMAKE_CURRENT_SOURCE_DIR} DIRECTORY)

set(CMAKE_PREFIX_PATH ${PARENT_DIR}/sdk/mongodb)
message("CMAKE_PREFIX_PATH = ${CMAKE_PREFIX_PATH}")
find_package(libmongocxx REQUIRED)
find_package(libbsoncxx REQUIRED)
set(MongoDb_INCLUDE_DIR ${PARENT_DIR}/sdk/mongodb/include)
include_directories(${MongoDb_INCLUDE_DIR}/mongocxx/v_noabi 
                    ${MongoDb_INCLUDE_DIR}/bsoncxx/v_noabi)

set(SOURCE_FILES test.cpp)
add_executable(cmongodb ${SOURCE_FILES})

target_link_libraries(cmongodb  ${LIBMONGOCXX_LIBRARIES} 
                                ${LIBBSONCXX_LIBRARIES})

Мне удалось скомпилировать с помощью этого CMakeLists.txt.

новая конфигурация проекта будет в ближайшее время. {GTest & Boost & MongoDb C++ Driver}

Спасибо!!

Сообщение об ошибке не соответствует отображаемому вами CMakeLists.txt. Используя find_package, вы выполняете поиск «libbsoncxx», но сообщение об ошибке соответствует найденному пакету «libbsoncxx-static». Пожалуйста, покажите фактический код и сообщение об ошибке, которые он производит.

Tsyvarev 19.12.2018 20:48

Спасибо за ваш комментарий. Я обновил сообщение об ошибке.

ugitho 19.12.2018 21:59
Они сказалиlibbsoncxx является частью MongoDB. Вероятно, вам нужно намекнуть CMake о каталоге установки MongoDB, например установив для переменной CMAKE_PREFIX_PATHокружающая обстановка значение ${Devfolder}/sdk/mongodb. Если это не помогает, попробуйте найти один из файлов, перечисленных в сообщении об ошибке (libbsoncxxConfig.cmake или libbsoncxx-config.cmake), в каталоге установки MongoDB.
Tsyvarev 20.12.2018 08:37

Добавление набора (CMAKE_PREFIX_PATH $ {Devfolser} SDK / MongoDB) и пытается бревнами: сообщение сообщения ( "LIBMONGOCXX_INCLUDE_DIRS = $ {LIBMONGOCXX_INCLUDE_DIRS}") ( "LIBMONGOCXX_LIBRARIES = $ {LIBMONGOCXX_LIBRARIES}") сообщения ( "LIBBSONCXX_INCLUDE_DIRS = $ {LIBBSONCXX_INCLUDE_DIRS}") message ("LIBBSONCXX_LIBRARIES = $ {LIBBSONCXX_LIBRARIES}"), но, видимо, это не работает:

ugitho 20.12.2018 11:03

LIBMONGOCXX_INCLUDE_DIRS = $ {Devfolder} / SDK / MongoDB / включать / mongocxx / v_noabi; $ {Devfolde г} / SDK / MongoDB / inclu де / bsoncxx / v_noabi LIBMONGOCXX_LIBRARIES = LIBMONGOCXX_LIBRARY_PATH-NOTFOUND; LIBBSONCXX_LIBRARY_PATH-NO TFOUND LIBBSONCXX_INCLUDE_DIRS = $ { Devfolder} / sdk / mongodb / include / bsoncxx / v_noabi LIBBSONCXX_LIBRARIES = LIBBSONCXX_LIBRARY_PATH-NOTFOUND

ugitho 20.12.2018 11:08

Комментарии плохо подходят для многострочного кода. Лучше обновите вопрос, добавив в него дополнительную информацию. Итак, установка CMAKE_PREFIX_PATH помогает хотя бы частично - он находит подключаемые каталоги, но не библиотеки. Кстати, в исходном коде вы используете LIBMONGOCXX_STATIC_LIBRARIES - возможно, вам стоит проверить значение этой переменной вместо значения LIBMONGOCXX_LIBRARIES. (Я не знаю, какую переменную следует использовать на самом деле).

Tsyvarev 20.12.2018 11:30

Простите @Tsyvarev! Я обновил CmakeLists.txt и логи.

ugitho 20.12.2018 11:53

Для справки в будущем: после того, как вы добавили CMAKE_PREFIX_PATH, но по-прежнему получили ошибку компоновщика: unable to find library -lbsoncxx, это произошло потому, что компоновщик не знал путь к bsoncxx. Вы могли использовать переменную {LIBBSON_CXX_LINKER}, которая включает абсолютный путь глянь сюда. При этом использование find_package, как и вы, в любом случае кажется предпочтительным, чем использование PkgConfig.

kevinAlbs 01.01.2019 18:27
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
8
528
0

Другие вопросы по теме