文章

在win10上编译mongocxx4.0.0的mt静态库

在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添加到系统变量中,以我为例:

7513ddd363c14669821290cb2b227b36

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_staticmongocxx_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 中的路径,但是也没有效果。遂放弃。

8. 参考123

本文由作者按照 CC BY 4.0 进行授权