1

我已按照以下文档中的说明进行操作(包括构建 mongo-c-driver 的说明):https ://mongodb.github.io/mongo-cxx-driver/mongocxx-v3/installation/

我正在尝试构建提供的示例代码(使用 VS2015),为方便起见,我将复制粘贴:

#include <iostream>

#include <bsoncxx/builder/stream/document.hpp>
#include <bsoncxx/json.hpp>

#include <mongocxx/client.hpp>
#include <mongocxx/instance.hpp>

int main(int, char**) {
    mongocxx::instance inst{};
    mongocxx::client conn{ mongocxx::uri{} };

    bsoncxx::builder::stream::document document{};

    auto collection = conn["testdb"]["testcollection"];
    document << "hello" << "world";

    collection.insert_one(document.view());
    auto cursor = collection.find({});

    for (auto&& doc : cursor) {
        std::cout << bsoncxx::to_json(doc) << std::endl;
    }
}

我已经根据提供的项目设置指定了头文件和库包含目录。我还添加了 MONGOCXX_STATIC 和 BSONCXX_STATIC 预处理器定义。

最初,我将以下库添加到链接器设置中:libmongocxx.lib;libbsoncxx.lib;mongoc-static-1.0.lib;bson-1.0.lib;

当编译失败时,我尝试使用静态 bson 库(不知道为什么文档建议使用非静态库?),所以我的输入库现在如下:libmongocxx.lib;libbsoncxx.lib;mongoc-static-1.0.lib;bson-static-1.0.lib;

尽管我尽了最大的努力,并疯狂地谷歌搜索,我还是得到了大约 2000 个未解决的外部,我在下面复制并粘贴了一个示例:

libmongocxx.lib(distinct.obj) : error LNK2001: unresolved external symbol __imp_mongoc_read_prefs_new

看起来好像它来自 mongo c 驱动程序。我已经看过这篇 SO 文章,但我已经链接了如上所述的 mongoc-static-1.0.lib - 不幸的是,在这篇文章中几乎没有其他内容。编译器清楚地找到了所说的库(否则它会抱怨“未找到”错误),所以我只能认为我以某种方式错误地构建了库。

在这一点上我还要提到,我已经使用非静态库和 dll 成功构建并运行了代码 - 但是,非常希望避免使用 dll,因此我想尽可能使用静态库.

我现在已经多次阅读安装说明,我印象深刻的是以下内容:

如果您需要静态库,请务必在构建 libmongoc 时使用 --enable-static 配置选项。

但是,这似乎只适合在 Linux 中安装,我正在使用 CMake 在 Windows 中安装。我运行 CMake.exe -LH 以查看有哪些可用选项,希望能找到有关静态库的信息,但没有骰子。似乎没有必要的选项来构建静态库,因为当我安装 mongo-c-driver 时,我成功获得了 bson-static-1.0.lib 和 mongoc-static-1.0 库。

我发现自己不知所措!任何帮助将不胜感激,干杯。

4

1 回答 1

1

你解决了这些问题吗?我有类似的问题。但是,如果您使用较旧的驱动程序(如 mongoc 1.4、bson 1.4 和 mongocxx 3.0)似乎没问题,尽管它们只能支持 mongodb 3.2 及更早版本

于 2017-02-14T08:30:43.547 回答