ubuntu上的mongodb c ++驱动程序

时间:2018-12-19 19:19:18

标签: c++ mongodb cmake c++14 mongo-cxx-driver

我正在尝试在Ubuntu 16.04上测试mongodb c ++驱动程序。

驱动程序安装在${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)

然后我想在我的CMake项目中使用mongodb驱动程序。

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.txttest.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

错误现在处于制造级别:

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

更新*** 2018年12月27日

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 ++驱动程序}

谢谢!

0 个答案:

没有答案