转载地址: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

生成了这两个东西

然后修改这个配置文件

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

# 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= --stagedir="E:\Library\boost_1_70_0\bin\VC14" threading=multi --build-type=complete

参数按照博主的说明设置

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

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

三、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两个项目

至此第一个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初始化失败

 struct BSONCXX_API b_utf8 {
static constexpr auto type_id = type::k_utf8; ///
/// Constructor for b_utf8.
///
/// @param value
/// The value to wrap.
///
template <typename T,
typename std::enable_if<!std::is_same<b_utf8, typename std::decay<T>::type>::value,
int>::type = >
BSONCXX_INLINE explicit b_utf8(T&& t) : value(std::forward<T>(t)) {} stdx::string_view value; ///
/// Conversion operator unwrapping a string_view
///
BSONCXX_INLINE operator stdx::string_view() const {
return value;
}
};

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

VS2017 + Windows10编译C++ MongoDB驱动的更多相关文章

  1. Debian/Ubuntu手动编译安装MongoDB C++11驱动及驱动测试

    本文章仅限cnblogs网站内转载!请某网站自觉,遵纪守法,尊重原创! 系统环境情况: 最小化.无桌面环境 新安装的Debian 8 Server 版本操作系统虚拟机一台 手动编译安装MongoDB ...

  2. MongoDB 驱动以及分布式集群读取优先级设置

    本文主要介绍使用MongoDB C驱动读取分布式MongoDB集群时遇到的坑,主要在读取优先级和匹配tag上:同时简单介绍Python驱动.Node.js驱动.Mongoose驱动如何使用读取优先级和 ...

  3. CentOS7 编译安装 Mongodb (实测 笔记 Centos 7.0 + Mongodb 2.6.6)

    环境: 系统硬件:vmware vsphere (CPU:2*4核,内存2G,双网卡) 系统版本:CentOS-7.0-1406-x86_64-DVD.iso 安装步骤: 1.准备 1.1 显示系统版 ...

  4. TODO:Linux安装PHP MongoDB驱动

    TODO:Linux安装PHP MongoDB驱动 PHP利于学习,使用广泛,主要适用于Web开发领域. MongoDB的主要目标是在键/值存储方式(提供了高性能和高度伸缩性)以及传统的RDBMS系统 ...

  5. Solaris 10下Qt编译Oracle 10g驱动

    上回书讲到<Oracle 10g在Solaris 10中安装详解>,现在开始用Qt来编译下Oracle 10g驱动吧!这样就可以通过Qt程序联入Oracle数据库了! Oracle的环境变 ...

  6. linux 下手动编译安装无线网卡驱动

    先参照 <本地yum源安装GCC >安装好gcc hp的笔记本上安装了CentOS6.3,没有安装无线网卡驱动,安装这个驱动,在Google上找了好多资料,最后终于解决了这个问题.在这里做 ...

  7. 在CDlinux下编译安装无线网卡驱动

    环境 主机:ThinkPadT440P 系统:CDlinux9.7.1 概述 准备利用CDlinux来破解周围的wifi密码来免费蹭网,由于笔记本是新买的,系统没有自带驱动,只能自己手动到网上下载.编 ...

  8. 安装golang的mongodb驱动mgo速记

    这里介绍的方法只适用于Centos平台,测试版本为centos 6.5 下载源码安装实在麻烦,这里采用比较简单的方法给GO安装mongodb驱动 安装mgo之前,需要先安装bzr yum -y ins ...

  9. 20190418 CentOS7实用技能综合:系统安装 + WinScp客户端连接 + 防火墙端口号iptables + Nginx编译安装 + MySQL编译安装 + Redis编译安装 + MongoDB编译安装 + ActiveMQ/RocketMQ/RabbitMQ编译安装 + ...各类常用生产环境软件的编译安装

    系统安装 + WinScp客户端连接 + 防火墙端口号iptables + Nginx编译安装 + MySQL编译安装 + Redis编译安装 + MongoDB编译安装 + ActiveMQ/Roc ...

随机推荐

  1. Python论做游戏外挂,Python输过谁?

    玩过电脑游戏的同学对于外挂肯定不陌生,但是你在用外挂的时候有没有想过如何做一个外挂呢? 我打开了4399小游戏网,点开了一个不知名的游戏,唔,做寿司的,有材料在一边,客人过来后说出他们的要求,你按照菜 ...

  2. Dubbo之服务消费

    Dubbo的服务消费主要包括两个部分.第一大步是ReferenceConfig类的init方法调用Protocol的refer方法生成Invoker实例,这是服务消息的关键.第二大步是把Invoker ...

  3. python语言基础3

    一:python函数 是组织好的,可重复使用的,用来实现单一,或相关联功能的代码块.以前使用过的一些Python提供的内建函数,如print().max(4,18).min(100,50).当然我们自 ...

  4. 【Python】1.PyQT5界面初尝试

    1->通过pycharm打开QTdesigner.创建新Form. 2->选择Widget创建 3->不添加任何控件 点击保存 pycharm列表如下 后缀名位ui的  即QTdes ...

  5. Codeforce 567A - Lineland Mail

    All cities of Lineland are located on the Ox coordinate axis. Thus, each city is associated with its ...

  6. c++ stl在竞赛里的使用总结

    SET bzoj2761: [JLOI2011]不重复数字 这题... count() 的用法,返回这个值出现的次数,但是在set里只会出现0次和1次,这个可以判断某个值是否在set里出现过 还有si ...

  7. ansible笔记(15):循环(二)with_items/with_list/with_together/with_flattened

    嵌套的列表(序列中的序列),示例如下: --- - hosts: 192.168.10.2 remote_user: root gather_facts: no tasks: - debug: msg ...

  8. 一步步教你如何在Ubuntu虚拟机中安装QEMU并模拟模拟arm 开发环境(一)uImage u-boot(转)

    初次接触qemu是因为工作的需要,有时候下了班,可能需要在家研究一些东西,因为博主用到arm环境,这时候博主比较小气,不愿花钱买开发板,当然博主在这里给大家的建议是,如果要真正学懂arm构架的相关知识 ...

  9. Docker最全教程——从理论到实战(十一)

    前言 容器教程的路还很长,笔者尽量根据实践来不断地完善.由于在编写的过程中还会有完善和补充,后续可能会以番外来补充. 接下来会分享TeamCity.树莓派等内容,节奏可能会有点跳脱. 另外,长沙.NE ...

  10. 六、JVM之垃圾回收

    GC日志 -Xmx1024m -Xms1024m -XX:+PrintGCDetails Heap PSYoungGen total 305664K, used 26214K [0x00000000e ...