MongoDB学习笔记(5)——windows环境下使用MinGW编译mongocxx-driver

一、环境和编译包说明:

1、mongodb driver说明网址MongoDB C++ Driver Manual

2、mongc-driver为:mongo-c-driver-1.17.3.tar.gz

3、mongcxx-driver为:mongo-cxx-driver-r3.6.2.tar.gz

4、boost库为(非必须,vs2017编译时需用到,其余暂无用到):boost_1_74_0.7z,路径为:Boost Downloads

5、cmake下载路径为:https://github.com/Kitware/CMake/releases或者Index of /files

6、MSYS2为:MSYS2,下载并安装

二、windows环境下使用MinGW编译mongocxx-driver库:

1、将下载的mongo-c-driver-1.17.3.tar.gz和mongo-cxx-driver-r3.6.2.tar.gz拷贝到电脑某个目录下,本人的为D盘(与MSYS2安装同一个磁盘中),解压mongo-c-driver和mongo-cxx-driver文件;

2、环境准备,下载并安装msys2,这个较为简单,安装成功,运行msys2.exe,之后输入如下命令,安装相关的依赖文件,这里主要是MinGW32和64:

为了提高更新速度,可以修改msys2的镜像配置:

1)、d:\msys64\etc\pacman.d\mirrorlist.mingw32中镜像配置头部输入:

Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/i686/
Server = http://mirrors.ustc.edu.cn/msys2/mingw/i686/

2)、d:\msys64\etc\pacman.d\mirrorlist.mingw64中镜像配置头部输入:

Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/x86_64/
Server = http://mirrors.ustc.edu.cn/msys2/mingw/x86_64

3)、d:\msys64\etc\pacman.d\mirrorlist.msys中镜像配置头部输入:

Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/msys/$arch/
Server = http://mirrors.ustc.edu.cn/msys2/msys/$arch/

32位,使用d:\msys64\mingw32.exe:

pacman --noconfirm -Syu
pacman --noconfirm -S mingw-w64-i686-gcc mingw-w64-i686-cmake
pacman --noconfirm -S mingw-w64-i686-extra-cmake-modules make tar
pacman --noconfirm -S mingw32/mingw-w64-i686-cyrus-sasl
pacman -S git

64位,使用d:\msys64\mingw64.exe: 

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
pacman -S git

3、将解压后的mongo-c-driver-1.17.3和mongo-cxx-driver-r3.6.2文件夹拷贝到msys2.exe的home/user/目录下,我这里全路径为d:\msys64\home\shelman\,这一步比较重要,后续cd命令支持,不然报没有路径的问题。

注意:编译32位或64位时,需要将前一个版本的文件夹删除后,重新解压缩mongo-c-driver-1.17.3.tar.gz和mongo-cxx-driver-r3.6.2.tar.gz,避免遗留文件干扰编译,导致失败。

4、打开d:\msys64\mingw32.exe,编译32位的mongo-c-driver库,依次输入以下指令:

cd mongo-c-driver-1.17.3/
mkdir cmake-build
cd cmake-build/
export OS_BUILD=32
cmake -G "MSYS Makefiles" -DCMAKE_CXX_FLAGS="-D__USE_MINGW_ANSI_STDIO=1" -cmake -G "MSYS Makefiles" -DCMAKE_CXX_FLAGS=" -D__USE_MINGW_ANSI_STDIO=1" "-DCMAKE_BUILD_TYPE=Release" -DCMAKE_INSTALL_PREFIX=/mingw32/local -DENABLE_AUTOMATIC_INIT_AND_CLEANUP=OFF -DENABLE_MONGOC=ON -DENABLE_MAN_PAGES=OFF -DENABLE_HTML_DOCS=OFF ..

编辑文件,打开文件:D:\msys64\home\shelman\mongo-c-driver-1.17.3\src\libbson\src\bson\bson-compat.h,在#if defined(__MINGW32__)后增加已和输入,#define __USE_MINGW_ANSI_STDIO 1,修改后效果如下:

#ifndef BSON_COMPAT_H
#define BSON_COMPAT_H


#if defined(__MINGW32__)
#define __USE_MINGW_ANSI_STDIO 1
#if defined(__USE_MINGW_ANSI_STDIO)
#if __USE_MINGW_ANSI_STDIO < 1
#error "__USE_MINGW_ANSI_STDIO > 0 is required for correct PRI* macros"
#endif
#else
#define __USE_MINGW_ANSI_STDIO 1
#endif
#endif

 保存并关闭该文件,继续输入如下指令,进行编译:

cmake --build .
cmake --build . --target install

5、编译32位的mongo-cxx-driver库,依次输入以下命令:

cd mongo-cxx-driver-r3.6.2/build
git init
export OS_BUILD=32
export "PKG_CONFIG_PATH=-L/mingw32/local/lib/pkgconfig"
export "CPPFLAGS=-I/mingw32/local/include"
export "LDFLAGS=-L/mingw32/local/lib"
cmake -G "MSYS Makefiles" -DBSONCXX_POLY_USE_MNMLSTC=1 "-DCMAKE_BUILD_TYPE=Release" -DCMAKE_INSTALL_PREFIX=/mingw32/local -DCMAKE_CXX_FLAGS="-std=c++11" -DCMAKE_PREFIX_PATH=/mingw32/local ..
cmake --build .
cmake --build . --target install

即可在mingw32/local路径下看到mongo-c和mongo-cxx的lib和include

6、打开d:\msys64\mingw64.exe,编译64位的mongo-c-driver库,依次输入以下指令:

cd mongo-c-driver-1.17.3/
mkdir cmake-build
cd cmake-build/
export OS_BUILD=64
cmake -G "MSYS Makefiles" -DCMAKE_CXX_FLAGS="-D__USE_MINGW_ANSI_STDIO=1" -cmake -G "MSYS Makefiles" -DCMAKE_CXX_FLAGS=" -D__USE_MINGW_ANSI_STDIO=1" "-DCMAKE_BUILD_TYPE=Release" -DCMAKE_INSTALL_PREFIX=/mingw64/local -DENABLE_AUTOMATIC_INIT_AND_CLEANUP=OFF -DENABLE_MONGOC=ON -DENABLE_MAN_PAGES=OFF -DENABLE_HTML_DOCS=OFF ..

编辑文件,打开文件:D:\msys64\home\shelman\mongo-c-driver-1.17.3\src\libbson\src\bson\bson-compat.h,在#if defined(__MINGW32__)后增加已和输入,#define __USE_MINGW_ANSI_STDIO 1,修改后效果如下:

#ifndef BSON_COMPAT_H
#define BSON_COMPAT_H


#if defined(__MINGW32__)
#define __USE_MINGW_ANSI_STDIO 1
#if defined(__USE_MINGW_ANSI_STDIO)
#if __USE_MINGW_ANSI_STDIO < 1
#error "__USE_MINGW_ANSI_STDIO > 0 is required for correct PRI* macros"
#endif
#else
#define __USE_MINGW_ANSI_STDIO 1
#endif
#endif

 保存并关闭该文件,继续输入如下指令,进行编译:

cmake --build .
cmake --build . --target install

7、编译64位的mongo-cxx-driver库,依次输入以下命令:

cd mongo-cxx-driver-r3.6.2/build
git init
export "CPPFLAGS=-I/mingw64/local/include"
export "LDFLAGS=-L/mingw64/local/lib"
export "PKG_CONFIG_PATH=-L/mingw64/local/lib/pkgconfig"
export OS_BUILD=64
cmake -G "MSYS Makefiles" -DBSONCXX_POLY_USE_MNMLSTC=1 "-DCMAKE_BUILD_TYPE=Release" -DCMAKE_INSTALL_PREFIX=/mingw64/local -DCMAKE_CXX_FLAGS="-std=c++11" -DCMAKE_PREFIX_PATH=/mingw64/local ..
cmake --build .
cmake --build . --target install

即可在mingw64/local路径下看到mongo-c和mongo-cxx的lib和include

8、卸载操作,32位进入d:\msys64\mingw32\local\share\mongo-c-driver和d:\msys64\mingw32\local\share\mongo-cxx-driver执行uninstall.cmd即可,64位进入d:\msys64\mingw64\local\share\mongo-c-driver和d:\msys64\mingw64\local\share\mongo-cxx-driver执行uninstall.cmd即可

9、如果编译mongo-cxx-driver时候,在编译EP_mnmlstc_core出现错误:

Performing configure step for 'EP_mnmlstc_core'
CMakeList.txt Error

一般是下载和编译EP_mnmlstc_core出错,可以在git上下载EP_mnmlstc_core,压缩包命名为core-1.1.0.zip,

https://github.com/mnmlstc/core放到/mongo-cxx-driver-3.6.2/build/src/bsoncxx/third_party/EP_mnmlstc_core-prefix/src目录下,并解压core-1.1.0.zip并改名为EP_mnmlstc_core,进入/mongo-cxx-driver-3.6.2/build/src/bsoncxx/third_party/EP_mnmlstc_core-prefix/tmp/EP_mnmlstc_core-gitclone.cmake注释从# try the clone 3 times in case there is an odd git clone issue 

                set(error_code 1)
                set(number_of_tries 0) ...
                到最后一行,然后在cd到/mongo-cxx-driver-3.6.2/build/src/bsoncxx/third_party/EP_mnmlstc_core-prefix/src目录下,执行命令:

make EP_mnmlstc_core
make
make install

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值