一、环境和编译包说明:
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