先决条件:
- CMake 版本大于3.2
- gcc 4.8, 5.4
- ubuntu 16.04
- git
- mongoc driver 1.14.0 安装
1 wget “https://github.com/mongodb/mongo-c-driver/releases/download/1.14.0/mongo-c-driver-1.14.0.tar.gz” 2 tar xzf mongo-c-driver-1.14.0.tar.gz 3 cd mongo-c-driver-1.14.0.tar.gz 4 mkdir cmake-build 5 cmake -DENABLE_AUTOMATIC_INIT_AND_CLEANUP=OFF .. 6 make 7 sudo make install
- mongocxx 3.4.0
1 wget "https://github.com/mongodb/mongo-cxx-driver/archive/r3.4.0.tar.gz" 2 tar -xzf mongo-cxx-driver-r3.4.0 3 cd mongo-cxx-driver-r3.4.0/build 4 5 6 CMake: (此处需要安装git sudo apt-get install git) 7 cmake -DCMAKE_BUILD_TYPE=Release \ 8 -DBSONCXX_POLY_USE_MNMLSTC=1 \ 9 -DCMAKE_INSTALL_PREFIX=/usr/local \ 10 -DLIBBSON_DIR=/usr/local/lib \ 11 -DLIBMONGOC_DIR=/usr/local/lib .. 12 13 sudo make EP_mnmlstc_core 14 make && sudo make install
- 测试文件编译(CMake)
1 cmake_minimum_required(VERSION 2.6) 2 project(test) 3 4 5 set(CMAKE_BUILD_TYPE "Debug") 6 set(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb") 7 set(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall") 8 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") 9 set(CMAKE_VERBOSE_MAKEFILE ON) 10 11 12 13 include_directories(/usr/local/include/bsoncxx/v_noabi /usr/local/include/mongocxx/v_noabi) 14 15 add_executable(test_example test.cpp) 16 17 target_link_libraries(test_example bsoncxx mongocxx) 18
- 常见错误
编译未通过
./test_example: error while loading shared libraries: libbsoncxx.so._noabi: cannot open shared object file: No such file or directorymongoc driver 路径系统未读到,手动链接库到 /etc/profile 重启bash 生效
LD_LIBRARY_PATH=/usr/local/lib export LD_LIBRARY_PATH CPATH=$CPATH:/usr/local/include/libmongoc-1.0:/usr/local/include/libbson-1.0:/usr/local/include/bsoncxx/v_noabi:/usr/local/include/mongocxx/v_noabi export CPATH CMAKE_PREFIX_PATH=/usr/local/lib.libbson-1.0 export CMAKE_PREFIX_PATH
测试代码
1 #include <iostream> 2 3 #include <bsoncxx/builder/stream/document.hpp> 4 #include <bsoncxx/json.hpp> 5 6 #include <mongocxx/client.hpp> 7 #include <mongocxx/instance.hpp> 8 9 int main(int, char**) { 10 mongocxx::instance inst{}; 11 mongocxx::client conn{mongocxx::uri{}}; 12 13 bsoncxx::builder::stream::document document{}; 14 15 auto collection = conn["testdb"]["testcollection"]; 16 document << "hello" << "world"; 17 18 collection.insert_one(document.view()); 19 auto cursor = collection.find({}); 20 21 for (auto&& doc : cursor) { 22 std::cout << bsoncxx::to_json(doc) << std::endl; 23 } 24 }
测试成功
{ "_id" : { "$oid" : "5ce27103177e415851716ee2" }, "hello" : "world" }