3

请告诉我如何使用 mongodb 的 c++ 驱动程序构建程序。没有因为我的英语不好而发火。

我的环境

  • Windows7 64位
  • Visual Studio Ultimate 2012(x64 发布目标项目)

我执行了以下步骤。

  • 我安装了 Ptython 2.7.2、Python for Windows 扩展和 Scons 2.3.0。
  • 我安装了 boost 1.54.0。我执行了 'boostrap' 和 'b2 -a --build-type=complete --address-model=64 --link=static --runtime-link=static'
  • 我下载了mongodb-linux-x86_64-v2.4-latest.tgz。
  • 我在 SConstruct 中添加了以下文本。

    env.Append(CPPPATH=['C:\\boost\\boost_1_54_0'])
    env.Append(LIBPATH=['C:\\boost\\boost_1_54_0\\stage\\lib'])
    env.Append(CPPDEFINES=["_UNICODE"])
    env.Append(CPPDEFINES=["UNICODE"])
    
  • 我执行了“scons mongoclient”。

  • 我制作了一个 Visual Studio C++ 项目。
  • 我在项目中设置了“Release”和“x64”。
  • 在属性页/配置属性/C C++/常规/附加包含目录中,我设置了“C:\boost\boost_1_54_0”和“C:\mongo\mongo-cxx-driver-v2.4\src”。
  • 在属性页/配置属性/链接器/常规/附加库目录中,我设置了“C:\boost\boost_1_54_0\stage\lib”和“C:\mongo\mongo-cxx-driver-v2.4”。
  • 在属性页/配置属性/链接器/输入/附加依赖项中,我设置了“mongoclient.lib”、“ws2_32.lib”和“psapi.lib”。
  • 在属性页/配置属性/链接器/输入/忽略特定默认库中,我设置了“msvcprt.lib”和“LIBCMT.lib”。
  • 在属性页/配置属性/C C++/预处理器/预处理器定义中,我设置了“_CRT_SECURE_NO_WARNINGS”。
  • 在属性页/配置属性/C C++/代码生成/运行时库中,我设置了“多线程 (/MT)”。

我使用驱动程序制作了一个程序。但是,程序的构建解决方案失败了。

1>mongoclient.lib(stringutils.obj) : error LNK2001: unresolved external symbol __security_check_cookie
1>mongoclient.lib(initializer_dependency_graph.obj) : error LNK2001: unresolved external symbol __security_check_cookie
1>mongoclient.lib(initializer.obj) : error LNK2001: unresolved external symbol __security_check_cookie
....
 fatal error LNK1120: 154 unresolved externals

如果您指出步骤中的任何奇怪之处,如果对我有帮助。

谢谢你。

4

2 回答 2

11

如何构建 MongoDB C++ 驱动程序

该解决方案在具有以下特点的机器上成功:

  1. Windows XP SP3 32 位
  2. Visual Studio Express 2010 (VC 10)

我使用 D:\MongoDBcplusplusClient 作为工作目录(我在那里安装了所有先决条件)。

过程:

  • 步骤1

下载 MongoDB C++ 驱动程序:

https://github.com/mongodb/mongo-cxx-driver

您可以使用 Git 进行克隆或将其下载为 .zip 文件(我做了第二个)。您将获得类似 mongo-cxx-driver-legacy.zip 的文件。将其解压缩到工作目录中的文件夹 mongo-cxx-driver-legacy。

  • 第2步

下载 Boost 预构建的 Windows 二进制文件。注意力!!!您应该使用特定版本的 Boost。在我的情况下,版本 1.52 做到了。你可以在这里下载:

http://boost.teeks99.com/

我下载了 boost_1_52_0-vc32-bin.exe 自解压exe。将它放在您的工作目录中并运行它。它将创建一个包含 boost 二进制文件(.lib 和 .dll 文件)的文件夹(类似于 lib32)

  • 第 3 步

下载 Boost 源代码(.h 文件)。当然,这些应该与步骤 2 中的版本相同。我从这里下载了它们:

http://sourceforge.net/projects/boost/files/boost/1.52.0/

您将获得一个文件 boost_1_52_0.zip,您可以在 boost_1_52_0 文件夹中提取该文件。

  • 第4步

下载 Python。在这个例子中,我从这里下载了 2.7.9 版本,特别是 Windows x86 MSI 安装程序:

https://www.python.org/downloads/release/python-279/

  • 第 5 步

从这里下载 Scons:

http://www.scons.org/download.php

我下载了 Windows 安装程序 (scons-2.3.4-setup.exe) 并将 Scons 安装在 Python 目录中(在我的例子中是 C:\Python27)。

  • 第 6 步

从这里下载 msinttypes:

https://code.google.com/p/msinttypes/

(您应该将这些头文件包含到使用驱动程序的项目中)

  • 第 7 步

转到开始->运行...并在运行框中输入 cmd。在打开的命令提示符窗口中导航到您在步骤 1 中提取 mongo 驱动程序的文件夹。在我的情况下,我做了: cd D:\ D:\MongoDBcplusplusClient\mongo-cxx-driver-legacy\mongo-cxx-driver-legacy

  • 第 8 步

使用 Scons 构建驱动程序。在您在第 7 步导航的目录中写入:

司康

--prefix=D:\MongoDBcplusplusClient\mongo-cxx-driver-legacy\mongo-cxx-driver-legacy

--cpppath=D:\MongoDBcplusplusClient\boost_1_52_0\boost_1_52_0

--libpath= D:\MongoDBcplusplusClient\lib32

--win-version-min=xpsp3 安装

然后按 Enter。

--prefix标志指定将创建驱动程序的.lib 文件的目标目录,-- cpppath指定Boost 头文件所在的文件夹,-- libpath指定Boost .lib 文件的路径。当然,您应该将路径更改为您的路径。将在--prefix/lib 路径创建一个名为libmongoclient-s.lib的文件。如果要在启用调试的情况下构建驱动程序,则应使用以下命令:

司康

--prefix=D:\MongoDBcplusplusClient\mongo-cxx-driver-legacy\mongo-cxx-driver-legacy

--cpppath=D:\MongoDBcplusplusClient\boost_1_52_0\boost_1_52_0

--libpath= D:\MongoDBcplusplusClient\lib32

--win-version-min=xpsp3

--dbg=安装时

将在--prefix/lib路径中创建一个名为libmongoclient-sgd.lib的文件。

  • 第 9 步

在 Windows 资源管理器中导航到安装了 MongoDB C++ 驱动程序的文件夹,进入子文件夹 lib(在我的情况下,这是 D:\MongoDBcplusplusClient\mongo-cxx-driver-legacy\mongo-cxx-driver-legacy\lib)和将文件libmongoclient-s.lib重命名为mongoclient.lib,将libmongoclient-sgd.lib重命名为mongoclient-gd.lib

  • 第 10 步

打开 Visual Studio 2010 Express 并打开要在其中使用 MongoDB C++ 驱动程序的项目。您应该指定依赖项。在解决方案资源管理器(左列)中右键单击项目名称,然后点击属性。转到 C/C++ → General 并在 Additional Include Directories 添加:

a) Boost 头文件目录(在我的例子中是 D:\MongoDBcplusplusClient\boost_1_52_0\boost_1_52_0)

b) MongoDB C++ 驱动头文件目录(在我的例子中是 D:\MongoDBcplusplusClient\mongo-cxx-driver-legacy\mongo-cxx-driver legacy\include)

c) Cstdint 类型头文件目录(在我的情况下为 :\MongoDBcplusplusClient\msinttypes-r26 )

  • 第 11 步

转到链接器→常规并在附加库目录中添加:

a) Boost .lib 文件目录(在我的例子中为 D:\MongoDBcplusplusClient\lib32)

b) MongoDB C++ 驱动程序 .lib 文件目录(在我的例子中是 D:\MongoDBcplusplusClient\mongo-cxx-driver-legacy\mongo-cxx-driver-legacy\lib)

在这些步骤之后,使用驱动程序的项目将在发布和调试配置中成功构建。

于 2015-03-04T11:15:33.387 回答
9

简单的解决方案使用 vcpkg。

按照 git 上的说明下载 vcpkg。 https://github.com/Microsoft/vcpkg

  1. 步骤1
C:\vcpkg>.\vcpkg search mongodb

你会看到这样的东西

mongo-c-driver       1.6.2-1          Client library written in C for MongoDB.

mongo-cxx-driver     3.1.1-1          MongoDB C++ Driver.
  1. 第2步
C:\.\vcpkg search mongodb install mongo-cxx-driver

然后拿杯咖啡....

  1. 第 3 步
C:\vcpkg>.\vcpkg integrate install

完毕..

笔记

先决条件:

Windows 10、8.1 或 7

Visual Studio 2017 或 Visual Studio 2015 更新 3

只需导入

   #include <cstdint>
   #include <iostream>
   #include <vector>
   #include <bsoncxx/json.hpp>
   #include <mongocxx/client.hpp>
   #include <mongocxx/stdx.hpp>
   #include <mongocxx/uri.hpp>

     using bsoncxx::builder::stream::close_array;
     using bsoncxx::builder::stream::close_document;
     using bsoncxx::builder::stream::document;
     using bsoncxx::builder::stream::finalize;
     using bsoncxx::builder::stream::open_array;
     using bsoncxx::builder::stream::open_document;
于 2017-10-27T18:41:12.047 回答