mongodb c 驱动

资源

本教程翻译自 MongoDB C Driver 的 官方安装教程。更新日期:2018年9月21日。

接下来的步骤将会指导你一步步的进行下载、编译和安装当前发布版本的 MongoDB C Driver(libmongoc) 和 BSON library(libbson)。

支持的平台

MongoDB C Driver 持续的在 以下不同的平台 测试过:

  • Archlinux
  • Debian 8.1
  • macOS 10.10
  • Microsoft Windows Server 2008
  • RHEL 7.0, 7.1, 7.2
  • SUSE 12
  • Ubuntu 12.04, 14.04, 16.04
  • Clang 3.4, 3.5, 3.7, 3.8
  • GCC 4.6, 4.8, 4.9, 5.3
  • MinGW-W64
  • Visual Studio 2010, 2013, 2015
  • x86, x86_64, ARM (aarch64), Power8 (ppc64le), zSeries (s390x)

使用包管理工具安装 libmongoc

一些 Linux 发布版本提供了 libmongoc 和其相关依赖的包管理工具。使用包管理工具安装 libmongoc 最大的优势在于它会自动的安装相关依赖(包括 libbson)。

libmongoc 包可以在最新的 Debian 和 Ubuntu 上使用:

apt-get install libmongoc-1.0.0

在 Fedora上,mongo-c-driver 包使用以下命令可以获得:

dnf install mongo-c-driver

在最新的红帽(Red Hat)系统上,如 CentOS 和 RHEL 7,mongo-c-driver 包放到了 EPEL 仓库。可以在 这里 查看可用版本。包可以使用以下命令安装:

yum install mongo-c-driver

使用包管理工具安装 libbson

libbson 包在最新的 Debian 和 Ubuntu 版本可用,如果你已经安装 libmongoc,libbson 也会作为其依赖自动安装,当然它也可以独立的使用下面命令安装:

apt-get install libbson-1.0

在 Fedora 上,可以使用下面命令安装:

dnf install libbson

在最新的红帽(Red Hat)系统上,如 CentOS 和 RHEL 7,mongo-c-driver 包放到了 EPEL 仓库。可以在 这里 查看可用版本。包可以使用以下命令安装:

yum install libbson

在 Unix 上编译

libmongoc 准备条件

需要 OpenSSL 进行授权登录或使用 SSL 连接 MongoDB。Kerberos 或 LDAP 支持需要 Cyrus SASL。

在 RedHat/Fedora 上安装所有的可选依赖使用以下命令:

$ sudo yum install cmake openssl-devel cyrus-sasl-devel

在 Debian/Ubuntu 上:

$ sudo apt-get install cmak libssl-dev libsasl2-dev

在 FreeBSD上:

$ su -c 'pkg install cmake openssl cyrus-sasl'

libbson 准备条件

编译 libbson 仅需要准备 cmake,通过调整上面的命令行可以选择只安装 cmake

从发布版源码编译

除非你想参与 mongo-c-driver 和 libbson 的开发,否则你应该总是从发布版(release)的源码进行编译。

最新的 libmongoc 和 libbson 是 1.13.0,它们都被包含在 mongo-c-driver 中,可以在 这里下载。这篇文章中的所有命令都是使用了 cmake 的外部构建,外部构建最主要的特点是将编译产生的文件和安装源码进行分离。

下面这部分命令将会下载并解压驱动,并且配置它:

$ wget https://github.com/mongodb/mongo-c-driver/releases/download/1.13.0/mongo-c-driver-1.13.0.tar.gz
$ tar xzf mongo-c-driver-1.13.0.tar.gz
$ cd mongo-c-driver-1.13.0
$ mkdir cmake-build
$ cd cmake-build
$ cmake -DENABLE_AUTOMATIC_INIT_AND_CLEANUP=OFF ..

推荐使用 -DENABLE_AUTOMATIC_INIT_AND_CLEANUP=OFF 参数,详情参见 initialization and cleanup。另外一个有用的 cmake 参数是使用 -DCMAKE_BUILD_TYPE=Release 编译 release 优化版本,使用 -DCMAKE_BUILD_TYPE=Debug 编译调试的 debug 版本。使用 cmake -L .. 命令可以列出所有配置选项。

如果 cmake 命令成功执行,根据你的配置选项将会看到很多的输出。最后一行输出应该看起来像下面这样:

-- Build files have been written to: /home/user/mongo-c-driver-1.13.0/cmake-build

如果 cmake 输出和上面有任何不同,说明构建的过程很大的可能出现了错误,重新查看输出有什么不同然后改正对应的错误。

mongo-c-driver 包含了 libbson,以防止你的系统中没有安装 libbson。构建过程将会检测你的系统是否没有安装 libbson,并且使用包含的 libbson。

此外,你也可以通过设置 -DENABLE_MONGOC=OFF 来选择只编译 libbson :

$ cmake -DENABLE_AUTOMATIC_INIT_AND_CLEANUP=OFF -DENABLE_MONGOC=OFF ..

同样构建后会输出上面类似的的信息,尽管输出信息更少。一旦配置完成了,就可以使用下面命令安装选择的选项了:

$ make
$ sudo make install

有两种方法卸载已安装的组件,第一种方法是直接调用卸载程序,在 Linux/Unix 下命令如下:

$ sudo /usr/local/share/mongo-c-driver/uninstall.sh

在 Windows 下:

C:\Users\user> C:\mongo-c-driver\share\mongo-c-driver\uninstall.bat

第二种方法是在构建目录中执行以下命令,假设卸载时的状态和使用安装时的状态相同:

sudo make uninstall

第二种方法仅仅是调用了第一种方法中提到的卸载程序。

从 git 上编译

克隆仓库然后编译当前主分支或特定的发布分支标签:

$ git clone https://github.com/mongodb/mongo-c-driver.git
$ cd mongo-c-driver
$ git checkout x.y.z  # To build a particular release
$ mkdir cmake-build
$ cd cmake-build
$ cmake -DENABLE_AUTOMATIC_INIT_AND_CLEANUP=OFF ..
$ make
$ sudo make install

生成文档

安装 Sphinx,然后:

$ cmake -DENABLE_MAN_PAGES=ON -DENABLE_HTML_DOCS=ON ..
$ make mongoc-doc

如果只想编译 libbson 文档:

$ cmake -DENABLE_MAN_PAGES=ON -DENABLE_HTML_DOCS=ON ..
$ make bson-doc

如果希望文档和其它组件同时构建,可以在正常构建的时候添加 -DENABLE_MAN_PAGES=ON-DENABLE_HTML_DOCS=ON 选项。这一点无论是在发布的源码还是在 git 克隆的源码都是适用的。

在 macOS 上编译

安装 XCode 命令行工具:

$ xcode-select --install

同样需要 cmake。首先 根据 Homebrew 的说明 安装 Homebrew。然后执行:

$ brew install cmake

下载最新的源码:

$ curl -LO https://github.com/mongodb/mongo-c-driver/releases/download/1.13.0/mongo-c-driver-1.13.0.tar.gz
$ tar xzf mongo-c-driver-1.13.0.tar.gz
$ cd mongo-c-driver-1.13.0

构建安装:

$ mkdir cmake-build
$ cd cmake-build
$ cmake -DENABLE_AUTOMATIC_INIT_AND_CLEANUP=OFF ..

所有步骤和上面介绍的相同(包括只编译 libbson,编译文档等等)。

在 Windows 上使用 Visual Studio 编译

在 Windows 上编译需要 Windows Vista 或更新版本以及 Visual Studio 2010 或更新版本。此外,需要 cmake来产生 Visual Studio 项目文件。

首先产生 Visual Studio 项目文件。接下来我们假设使用 Visual Studio 2015 Express 编译 64 位文件。Express 版本可用在 Microsoft 官方上免费下载。同样我们使用 cmake 外部构建的方式产生独立于源文件的构建文件。

cd mongo-c-driver-1.13.0
mkdir cmake-build
cd cmake-build
cmake -G "Visual Studio 14 2015 Win64" \
  "-DCMAKE_INSTALL_PREFIX=C:\mongo-c-driver" \
  "-DCMAKE_PREFIX_PATH=C:\mongo-c-driver" \
  ..

注:译者这里使用的是 Visual Studio 2017,因此这里最后 cmake-G 参数后面为 Visual Studio 15 2017 Win64。更多的编译器选项可以使用 cmake -G 查看。

译者使用的完整命令为:cmake -G "Visual Studio 15 2017 Win64" "-DCMAKE_INSTALL_PREFIX=d:\software4\mongo_c_driver\install" "-DCMAKE_PREFIX_PATH=d:\software4\mongo_c_driver\install" ..

此外译者这里在第一次编译的时候一直卡在 looking for snprintf 这条信息上。使用 everything 搜索发现这是一个 boost 头文件。我这里使用了两种处理方法,一是直接 ctrl+c 跳过,查看 CMakeLists.txt 源文件发现应该使用替代的操作,找不到也没关系。另一种方法是我在第二次编译时将 boost 添加到环境变量中,这次给出找到 snprintf 信息。

(运行 cmake -LH .. 可以列出其他选项)

现在我们已经产生了项目文件,我们既可以使用 Visual Studio 也可以使用命令行的方式编译项目(译者这里使用 Visual Studio 进行构建,对应的打开 mongo-c-driver.sln 文件)。下面我们使用 msbuild.exe 命令在命令行中编译。

msbuild.exe /p:Configuration=RelWithDebInfo ALL_BUILD.vcxproj

Visual Studio 默认编译的类型为 Debug,但是我们推荐编译一个包含生成使用调试信息的 release 版本。现在 libmongoc 和 libbson 都已经编译完成,我们再使用 msbuild 将它们安装到之前 CMAKE_INSTALL_PREFIX 指定的位置。

msbuild.exe INSTALL.vcxproj

你应该可以在 C:\mongo-c-driver 目录下看到 libmongoc 和 libbson 已经被安装了。

关于如何在你的项目中使用这些驱动库,请参考 Using libmongoc in a Microsoft Visual Studio project

在Windows 上使用 MinGW-64 和 MSYS2 编译

msys2.github.io 安装 MSYS2.选择 x86_64 version而不是 i686.

打开 c:\msys64\ming64_shell.bat(不是 msys2_shell)。安装依赖:

pacman --noconfirm -Syu
pacman --noconfirm -S mingw-w64-x86_64-gcc mingw-w64-x86_64-cmake
pacman --noconfirm -S mingw-w64-x86_64-extra-cmake-modules make tar
pacman --noconfirm -S mingw64/mingw-w64-x86_64-cyrus-sasl

下载并解压最新源码,进入目录,然后使用 CMake 构建:

CC=/mingw64/bin/gcc.exe /mingw64/bin/cmake -G "MSYS Makefiles" -DCMAKE_INSTALL_PREFIX="C:/mongo-c-driver" ..
make
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,839评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,543评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,116评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,371评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,384评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,111评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,416评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,053评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,558评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,007评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,117评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,756评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,324评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,315评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,539评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,578评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,877评论 2 345

推荐阅读更多精彩内容

  • 关于Mongodb的全面总结 MongoDB的内部构造《MongoDB The Definitive Guide》...
    中v中阅读 31,898评论 2 89
  • 我们非常荣幸地宣布 Visual Studio 2017 现已推出! 此次发布提供新的轻量模块式安装体验,可根据自...
    三梦哥阅读 7,704评论 0 6
  • CMake学习 本篇分享一下有关CMake的一些学习心得以及相关使用。 本文目录如下: [1、CMake介绍] [...
    AlphaGL阅读 12,220评论 11 79
  • 1.1 如何验证某个元素是否为空 1.2 检查特定的HTML元素是否存在
    天黑北风吹阅读 184评论 0 0
  • 阴沉沉的夜晚,灰朦朦的天,一种欲冲破浓云走出迷雾的景象。 远望遥想。一片白茫茫,寒风刺骨,雪花飘飘,山峦皑皑,大地...
    昇夫阅读 467评论 2 5