VS2017 + Windows10编译C++ MongoDB驱动

Wesley13
• 阅读 690

转载地址:https://blog.csdn.net/sqcfj/article/details/86716831

mongoDB有两个接口库:mongo-c-driver和mongo-cxx-driver

前者是c代码接口库,后者是c++代码接口库,是在mongo-c-driver的基础上进行二次封装

一、准备工作

1、下载mongo-c-driver源码:https://github.com/mongodb/mongo-c-driver/releases/tag/1.13.0(注意:3.4.0版本mongo-cxx-driver只能配1.13.0mongo-c-driver)

2、下载mongo-cxx-driver源码:https://github.com/mongodb/mongo-cxx-driver/releases(3.4.0版本)

3、下载boost:https://www.boost.org/users/history/version_1_70_0.html(此为下载源码,需要自己编译 )

4、安装boost:https://blog.csdn.net/s_lisheng/article/details/72871218(建议直接https://sourceforge.net/projects/boost/files/boost-binaries/1.68.0/下载安装编译好的boost_1_68_0-msvc-14.0-64.exe安装包 )

二、boost编译

下面为编译boost步骤:(这个其实没有必要,可以跳过,全当体验编译过程。。。)

在根目录下运行bootstrap.bat

VS2017 + Windows10编译C++ MongoDB驱动

生成了这两个东西

VS2017 + Windows10编译C++ MongoDB驱动

然后修改这个配置文件

VS2017 + Windows10编译C++ MongoDB驱动

改成这样(话说也不知道有什么用)

# Boost.Build Configuration 
# Automatically generated by bootstrap.bat 
 
import option ; 
 
using msvc : 14.0 : "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.13.26128\bin\Hostx64\x64\cl.exe"; 
 
option.set keep-going : false ;

然后在开始菜单VS2017工具包下运行命令(随便打开一个CMD会找不到xxx文件错误......):

b2 stage --toolset=msvc-14.0 address-model=64 --stagedir="E:\Library\boost_1_70_0\bin\VC14" threading=multi --build-type=complete

参数按照博主的说明设置

VS2017 + Windows10编译C++ MongoDB驱动

这个编译需要一些时间,可以睡一觉......

 编译完成......内容和.exe安装解压后的是一样的,就是版本更新一点

VS2017 + Windows10编译C++ MongoDB驱动

 三、mongo-c-driver-1.13.0编译

由于源码中已经有了build文件夹,为了不和其中的混合,新建cmake-build,在此目录下打开cmd或power shell,指向以下命令(文件目录替换成自己的)

cmake -G "Visual Studio 15 2017 Win64" "-DCMAKE_INSTALL_PREFIX=E:\Library\mongo-c-driver-1.13.0" "-DCMAKE_PREFIX_PATH=E:\Library\mongo-c-driver-1.13.0" ..

然后生成就会生成解决方案,打开.sln文件,选择32或64位,分别编译生成ALL_BUILD, INSTALL两个项目

VS2017 + Windows10编译C++ MongoDB驱动

VS2017 + Windows10编译C++ MongoDB驱动 VS2017 + Windows10编译C++ MongoDB驱动

至此第一个c驱动编译完成,在根目录下已生成bin, build, lib文件夹

四、mongo-cxx-driver-r3.4.0编译

编译第二个c++驱动,此时需要用到boost库(这里使用的.exe安装的boost),步骤基本相同,源码中有空的build目录,就直接在这里编译了

cmake -G "Visual Studio 15 2017 Win64" "-DCMAKE_INSTALL_PREFIX=E:\Library\mongo-cxx-driver-r3.4.0" "-DCMAKE_PREFIX_PATH=E:\Library\mongo-c-driver-1.13.0" "-DBOOST_ROOT=E:\Library\boost_1_67_0" ..

然后和步骤和上面一样,打开.sln解决方案,分别ALL_BUILD, INSTALL,等待生成三个文件夹

 第二个c++驱动编译编译完成

使用的时候,需要将mongo-cxx-driver生成的include目录和mongo-cxx-driver生成的include目录,以及boost库目录都添加进去,链接上述生成的lib文件,并且把生成的dll放到可执行文件一起就可以了。到此windows平台下C++版本的mongo driver编译完成。

只有自己编译boost的过程比较麻烦,但可以选择使用现成的编译好的安装包

然后注意c和c++驱动的版本对应问题,应该不会有什么错误

五、重要说明

我在编译完成了以上两个库之后,在配置使用c++驱动时报了bsoncxx/types.hpp头文件错误,在该文件中所有的该结构体type_id初始化失败

 1 struct BSONCXX_API b_utf8 {
 2     static constexpr auto type_id = type::k_utf8;
 3 
 4     ///
 5     /// Constructor for b_utf8.
 6     ///
 7     /// @param value
 8     ///   The value to wrap.
 9     ///
10     template <typename T,
11               typename std::enable_if<!std::is_same<b_utf8, typename std::decay<T>::type>::value,
12                                       int>::type = 0>
13     BSONCXX_INLINE explicit b_utf8(T&& t) : value(std::forward<T>(t)) {}
14 
15     stdx::string_view value;
16 
17     ///
18     /// Conversion operator unwrapping a string_view
19     ///
20     BSONCXX_INLINE operator stdx::string_view() const {
21         return value;
22     }
23 };

最后不得不放弃使用c++驱动,而使用c驱动,具体demo可以参考c驱动API,倒是更为简洁一点。具体操作见 MongoDB C Driver Tutorial

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Easter79 Easter79
2年前
swap空间的增减方法
(1)增大swap空间去激活swap交换区:swapoff v /dev/vg00/lvswap扩展交换lv:lvextend L 10G /dev/vg00/lvswap重新生成swap交换区:mkswap /dev/vg00/lvswap激活新生成的交换区:swapon v /dev/vg00/lvswap
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Wesley13 Wesley13
2年前
Java获得今日零时零分零秒的时间(Date型)
publicDatezeroTime()throwsParseException{    DatetimenewDate();    SimpleDateFormatsimpnewSimpleDateFormat("yyyyMMdd00:00:00");    SimpleDateFormatsimp2newS
Wesley13 Wesley13
2年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
2个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这