在win10上编译mongocxx4.0.0的mt静态库
[TOC]
1. 前言
mongocxx 是基于 libmongoc 的 MongoDB 的 C++ 驱动程序的彻底重写 。它需要 C++11 编译器。众所周知,它构建在适用于86 8664Linux、macOS、Windows 和 FreeBSD 的 x 和 x - 架构上。
mongocxx 驱动程序库包含一个匹配的 bson 包 bsoncxx,它实现了 BSON 规范 。即使根本不使用 MongoDB,该库也可以独立用于对象序列化和反序列化。
根据 mongocxx 的官方文件,为连接 MongoDB 7.x 的数据库,需要安装 mongocxx 3.8+ 的版本。1
截止至 2024年8月20日,mongocxx 的最新稳定版本为 mongocxx 3.10.1 ,使用的c-driver版本为1.25.0。 截止至2025年4月15日,mongocxx 的最新稳定版本为 r4.0.0 ,使用的c-driver版本为1.29.0。
以下各步骤主要参考:2,是通过多次试验得到的实践可用的编译方案,尽量严格遵守,若要修改某一步的话,需要要注意命令行中路径的正确性。
2. 前提条件
执行下列步骤前,对开发环境有一定要求。
1)git
因为会存在从 gitlub 上直接下载代码的步骤,所以需保证电脑上已安装好 git。 若在执行下面步骤时遇到 SSL 相关的问题,可以临时禁用 SSL 验证来完成克隆操作:
1
git config --global http.sslVerify false
完成克隆后,重新启用 SSL 验证:
1
git config --global http.sslVerify true
2)CMake
下面需要使用cmake构建项目,因此需要提前安装好cmake,将cmake添加到系统变量中,以我为例:
3. 下载 mongocxx 源码
先打开一个cmd窗口,在cmd窗口中依次输入下面的命令:
下载指定版本的 mongocxx:
1
curl -OL https://github.com/mongodb/mongo-cxx-driver/releases/download/r3.10.1/mongo-cxx-driver-r3.10.1.tar.gz
解压:
1
tar -xzf mongo-cxx-driver-r3.10.1.tar.gz
4. 构建项目
将路径切换至 build:
1
cd mongo-cxx-driver-r4.0.0/build
手动备份一下 build 文件夹及其下的所有文件。若后面出问题的话直接复原 build 文件夹就行。
配置 C++ 驱动程序:(相关路径按需修改,下面配置是 win32、包含static项目的)
1
cmake -G "Visual Studio 15 2017" -A win32 -DCMAKE_CXX_STANDARD=17 -DCMAKE_INSTALL_PREFIX="C:\mongo-cxx-driver" -S "..\\" -B ".\\" -DBUILD_SHARED_LIBS=OFF
说明:
-DCMAKE_INSTALL_PREFIX:指定生成的安装路径。-S:源代码路径。也可以用绝对路径代替。-D:构建生成的目标路径。也可以用绝对路径代替。-DBUILD_SHARED_LIBS=OFF:指定编译静态库3- 若配置 mongocxx 过程中出错,需要将 build 整个文件夹删掉复原,然后再次尝试。
- 关于 boost:官方文件中说明 boost 在生成、编译过程中是可选的,因此本文在生成 mongocxx 的时候没有使用 boost。
- 指定的路径:
上述步骤全部成功的话,可在cmd中看到如下提示:(如果连不上github的话,会提示下载mongo-c-driver失败)
– Build files generated for: – build system: Visual Studio 15 2017 – instance: D:/Program Files (x86)/Microsoft Visual Studio/2017/Enterprise – instance: win32 – Configuring done (51.0s) – Generating done (2.7s) – Build files have been written to: C:/Users/Administrator/mongo-cxx-driver-r4.0.0/build-32-static
然后可以在目标路径中看到 .sln 文件。
5. 编译mt静态库
上面已经通过 CMake 生成了 mongcxx 的解决方案,找到该 .sln 文件,用 VS2017 打开。
1)查看依赖
找到项目 mongocxx_static,查看该项目的依赖项,并查看各依赖项目的依赖项,有的依赖项重复,现将所有涉及到的项目整理如下:
- bson_static
- bsoncxx_static
- generate_libbsoncxx_static-pc(这不是个代码项目,不用改)
- generate_libmongocxx_static-pc(这不是个代码项目,不用改)
- mongoc_static
- utf8proc_obj
- zlib_obj
- mongocxx_static
2)修改为mt
为了生成 mt 的 mongocxx.lib,需要将上面涉及到的所有项目修改为 mt 配置。
【配置属性】-【C/C++】-【代码生成】-【运行库】
3)修改生成文件名
bsoncxx_static 和 mongocxx_static 这两个项目的【目标文件名】也需要改一下,例如默认为mongocxx-static-rts-win32-v141-md,最好改为-mt。
4)编译项目
然后回到 cmd 的命令行,同样在 /build 路径,输入以下命令编译项目:
1
cmake --build . --config Release
这一步会比较慢,需要三五分钟才可以。(也可以直接在 VS2017 里编译出来目标静态库,但是下一步 install 可能会有问题) 如果成功的话会看到如下提示:
mongocxx_static.vcxproj -> C:\Users\Administrator\mongo-cxx-driver-r4.0.0\build-32-static\src\mongocxx\Release\mongoc xx-static-rts-win32-v141-md.lib Building Custom Rule C:/Users/Administrator/mongo-cxx-driver-r4.0.0/CMakeLists.txt
6. 打包使用文件
同样在 /build 路径,输入以下命令安装项目:
1
cmake --build . --target install --config Release
然后就能在 C:\mongo-cxx-driver 中看到会使用到的头文件(include文件夹)和静态库(lib文件夹)。
但是自动生成的目录有些乱,需要整理一下文件夹划分和文件名,方便后期使用。
7. 附
- 2025年4月14日:在公司电脑上用cmake构建项目的时候总是下载 mongo-c-driver 失败,猜测是因为公司防火墙的问题。在家里开个加速器就很顺利的完成了。
- 2025年4月14日:
- 问题:用cmake构建项目时,因为下载 mongo-c-driver 失败导致构建失败。
- 思路1:我尝试下载并编译出所需的 mongo-c-driver 静态库,并将其设置为构建 mongocxx 时的指定路径。但是没有效果,尝试命令见本地的 md 文档。这里就不列出了。
- 思路2:开加速器。在家里管用,但是在单位就不管用。可能是因为公司网络的问题。
- 思路3:修改 mongocxx 中指定的 mongoc 的下载路径为镜像地址。我是直接修改的 FetchMongoC.cmake 中的路径,但是也没有效果。遂放弃。
