如果我们想通过c++来完成MongoDB的开发,需要我们安装其c++对应的驱动,
一. 我的环境:
操作系统: Win10 64位
visual studio: vs2017
boost:1.67.0
这里说一下,由于MongoDB的c++版驱动是依赖于boost的,所以你需要提前安装好boost库,但是MongoDB的c语言版的驱动是不需要boost的。
在安装的时候可以参考 官网链接。
二. 我的安装过程
1. 首先你需要安装MongoDB的C语言版的驱动,也就是`MongoDB C driver`
1.1 这里需要下载相关的源代码 MongoDB C driver 下载链接
1.2. 这里我通过cmake生成vs的`.sln`项目文件,当然你也可以通过命令行的形式来完成所有工作,
这里需要通过camke编译,配置很简单,这里有以下几步:
- 设置解压之后的 cdriver 路径以及一个你要输出的路径
- 之后点击`configure`选择你要使用的编译器,这里我使用的是vs2017的编译器,之后点击`Finish`,等待其完成之后如下图所示,这里要 千万注意!!!`ZLIB`项目下的路径,我这里它指定的是`Anaconda\Library\lib`下,你的应该是你自己电脑上的路径,当你在vs中使用c++驱动的时候指定这一路径否则会报:找不到zlib.dll,或者找不到icuuc58.dll,再或者找不到icudt58.dll等等相关的dll文件
- 点击`Generate`,完成之后在你指定的路径下的`src`目录下就会出现vs的项目
1.3 之后我们需要生成相应的库文件,我们打开生成目录下的`mongo-c-driver.sln`文件:
- 进入之后会是一个很大的项目,因为这里面实际上集合了两个项目`libbson`以及`libmongoc`,这两个项目在生成目录下的`src`文件夹中可以找到对应的文件夹,其中有各自的`.sln`项目文件;
- 首先生成`ALL_BUILD`,这是要注意你生成的是`debug`还是`release`,这一步应该不会出问题
- 之后生成`INSTALL`项目,这里可能会出错,例如我的提示:`error MSB3073: 命令"setlocal`什么的,如图 :
造成这个问题的原因是因为这个项目生成过程中要往磁盘中写入文件,所以我们要以管理员身份来运行我们的vs(在开始菜单中找到vs,右击选择以管理员身份运行即可)
- 再以管理员身份打开解决方案,并生成`INSTALL`项目,这时就顺利通过了。
- 生成的文件在`C:\Program Files\mongo-c-driver`
1.4 此外:你如果你是通过打开两个项目分别生成对应的文件是要 注意 这两个项目生成的`debug`和`release`文件夹不在`x64`文件夹下,而是和`x64`文件夹同级目录下,找的时候要注意。
2. 完成C语言版的驱动安装之后,我们可以开始c++版驱动的安装,也就是`mongocxx driver`
1. 首先需要下载相关的源代码 [mongocxx driver 下载链接]
2. 之后我们需要创建vs的`.sln`文件
- 首先,我们将安装 `C语言版的驱动` 也就是`C:\Program Files\mongo-c-driver`路径下的`include`和`lib` 文件夹拷到和我们的源代码文件夹同级的目录下,例如我这里下载的源代码解压之后的路径是`D:\Software\EngineSoftware\MongoDB`,所以将两个文件夹拷贝到这个路径下,不然会报错
- 这里我还是采用cmake的GUI工具来完成,首先配置源文件路径和输出路径,之后点击`configure`,选择你的编译器,我这里是vs2017
- 之后会提示问题,这里我们需要指定两项内容,`libbson-1.0_DIR`和`BSONCxx`,`BSONCxx`根据你的平台会有所差异,windows这里选择`BSONCXX_PLOY_USE_BOOST`,就是使用boost库,`libbson-1.0_DIR`是需要指定一个`.cmake`的配置文件,这个文件在 C语言版驱动的cmake输出目录下 的`./src/libbson`文件夹中可以找到,完成之后点击`Generate`
- 这是会需要配置新的内容,`libmongoc-1.0_DIR`和`boost`,`libmongoc-1.0_DIR`和`libbson-1.0_DIR`很像,需要指定一个`.cmake`的配置文件,这个文件在 C语言版驱动的cmake输出目录下 的`./src/libmongoc`文件夹中可以找到,`boost`指定你电脑上 `boost头文件` 的引用目录,之后点击`Generate`
- 这时没有发现新的问题了,点击`Generate`生成就可以了
3. 打开输出目录下的`MONGO_CXX_DRIVER.sln`,也是一个很大的项目,和之前一样
1. 生成`ALL_BUILD`项目,在这个过程中可能会出现问题,我碰到的:
```
error C2338: You've instantiated std::aligned_storage<Len, Align> with an extended alignment (in other words, Align > alignof(max_align_t)). Before VS 2017 15.8, the member type would non-conformingly have an alignment of only alignof(max_align_t). VS 2017 15.8 was fixed to handle this correctly, but the fix inherently changes layout and breaks binary compatibility (*only* for uses of aligned_storage with extended alignments). Please define either (1) _ENABLE_EXTENDED_ALIGNED_STORAGE to acknowledge that you understand this message and that you actually want a type with an extended alignment, or (2) _DISABLE_EXTENDED_ALIGNED_STORAGE to silence this message and get the old non-conformant behavior.
```
这时需要我们修改对应的项目属性,包括:`bsoncxx` `bsoncxx_testing` `mongocxx`,`右击项目 -> 属性 -> c/c++ -> 预处理器 -> 预处理器定义 -> 编辑`, 在最后添加上`_ENABLE_EXTENDED_ALIGNED_STORAGE`,全部完成之后,点击再生成就可以了。
2. 最后生成`INSTALL`,这时在和`MONGO_CXX_DRIVER.sln` 同级的目录下会出现一个`install`文件夹,这里面就是我们要的最终结果啦~