MacOS下配置MongoDB C++ Driver


注:我的配置过程参照《Installing the mongocxx driver》官方文档完成,记录我本机的配置过程,过程中可能会有遗漏,所以完整配置过程,建议参照官方配置文档进行。


1 安装MongoDB C Driver

mongocxx驱动依赖于MongoDB C的驱动,所以需要先安装MongoDB C Driver。

  • 对于3.1.x版本的mongocxx需要安装1.5.0及以上的libmongoc
  • 对于3.0.x版本的mongocxx推荐使用最新的1.4.x版本libmongoc

配置安装过程如下:

  1. 安装XCode命令行工具

     $ xcode-select --install
    
  2. 使用Homebrew安装编译配置工具

     $ brew install automake autoconf libtool pkgconfig
    
  3. 下载解压libmongoc源码

     $ tar xzf mongo-c-driver-1.6.2.tar.gz
     $ cd mongo-c-driver-1.6.2
    
  4. 编译安装

     $ ./configure
     $ make
     $ sudo make install
    

2 下载mongocxx driver

官方文档中提供了两种方式下载驱动,一种是从github上clone源码,另一种是从release页面下载。

我采用的是从github上clone最新的稳定版源码:

git clone https://github.com/mongodb/mongo-cxx-driver.git \
--branch releases/stable --depth 1

3 cmake配置

默认情况下第一步中的libmongoc库会安装在/usr/local下,如果libmongoc没有安装在默认路径,则cmake配置需要配置PKG_CONFIG_PATHDCMAKE_INSTALL_PREFIX

此外,cmake的配置还需要针对不同系统选择polyfill,例如我的系统是MacOS,配置的选项选择-DBSONCXX_POLY_USE_MNMLSTC=1

配置如下:

cmake -DCMAKE_BUILD_TYPE=Release -DBSONCXX_POLY_USE_MNMLSTC=1 \
-DCMAKE_INSTALL_PREFIX=/usr/local ..

4 编译安装

在使用非Windows平台下,使用默认的MNMLSTC polyfill,还需要额外编译安装一个MNMLSTC的核心组件:

sudo make EP_mnmlstc_core

之后编译安装mongocxx driver即可:

make && sudo make install

至此,整个驱动就安装完成了,使用时,添加对应的编译选项即可。

5 测试

官方提供测试代码:

#include 

#include 
#include 

#include 
#include 

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;
    }
}

使用pkg-config编译:

c++ --std=c++11 test.cpp -o test $(pkg-config --cflags --libs libmongocxx)

如果没有报错则测试成功。具体数据库操作请查看官方mongo api。


注:使用Homebrew安装工具的过程可能会碰到:权限或不能使用sudo模式的问题,解决方法是在命令行运行:sudo chown -R $(whoami) /usr/local命令可解决。

你可能感兴趣的:(MacOS下配置MongoDB C++ Driver)