【问题标题】:Cannot compile against the mongo C++ driver in Fedora无法针对 Fedora 中的 mongo C++ 驱动程序进行编译
【发布时间】:2018-07-21 09:33:47
【问题描述】:

我无法编译使用 mongodb-cxx 驱动程序的代码。一切都适用于 C 驱动程序,但不适用于 Cxx。我运行 Fedora 28 并且已经从 Fedors 的官方存储库安装了以下软件包:

mongo-c-driver-1.9.5-1.fc28.x86_64 mongo-c-driver-devel-1.9.5-1.fc28.x86_64 mongo-c-driver-libs-1.9.5-1.fc28.x86_64 mongo-cxx-driver-1.1.2-13.fc28.x86_64 mongo-cxx-driver-devel-1.1.2-13.fc28.x86_64

我尝试编译的代码不调用任何 API 函数来连接数据库,但作为第一步,使用连接到 mongodb 和运行操作所需的包含文件和命名空间。我尝试编译的代码是:

#include <cstdint>                                                                                                                                                                                             
#include <iostream>
#include <vector>
#include <mongo/db/json.h>
#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;

int main() {
  return 0;
}

我尝试编译如下代码:

$ c++ --std=c++11 mongo-cxx.cc -o test $(pkg-config --cflags --libs libmongocxx)

在 pkg-config 搜索路径中找不到包 libmongocxx。 也许您应该将包含“libmongocxx.pc”的目录添加到 PKG_CONFIG_PATH 环境变量包“libmongocxx”, 'virtual:world' 需要,在包含的文件中找不到 /usr/include/mongo/db/json.h:20, 来自 mongo-cxx.cc:4: /usr/include/mongo/bson/bsonobj.h:20:10: 致命错误: boost/noncopyable.hpp:没有这样的文件或目录#include ^~~~~~~~~~~~~~~~~~~~~~~

如前所述,我使用 Fedora 的包管理器安装 monogdb 的 cxx 驱动程序,并没有从源代码编译。我需要做任何额外的步骤吗?

感谢您的帮助,

D.

【问题讨论】:

    标签: c++ mongodb mongo-cxx-driver


    【解决方案1】:

    您正在尝试混合使用旧的 C++ 驱动程序和新的驱动程序。您已安装的软件包 mongo-cxx-driver-devel-1.1.2-13.fc28.x86_64 是生命周期结束的“旧版”C++ 驱动程序。它不提供 pkg-config 文件。

    此外,您的代码似乎正在尝试包含来自旧驱动程序和新 mongocxx 驱动程序的标头,它们是完全独立的项目。

    最后,您似乎没有安装所需的 boost 标头。

    那么,你需要做的是:

    • 了解是否可以获得用于 fedora 的新 C++ 驱动程序包。如果是这样,请卸载旧驱动程序包,安装新的 C++ 驱动程序包,并删除不以 bsoncxxmongocxx 开头的标头的使用。
    • 如果您无法获得新的 C++ 驱动程序,则需要使用旧版驱动程序,并且应该停止使用 bsoncxxmongocxx 标头。您将需要安装 boost 开发头文件和库,并停止尝试调用 pkg-config,它仅在查找新的 C++ 驱动程序时使用。

    【讨论】:

    • 感谢您的提示。我删除了已安装的 mongo-cxx 软件包。由于我已经安装了 mongo-c-driver 1.9.5,因此我必须检查 mongo-cxx-3.2.x 它将与此版本的 C 驱动程序兼容。我这样做并构建和安装,现在它工作正常。再次感谢您的帮助!
    • @Dan - 很高兴听到你成功了。希望有一天fedora会开始打包新的驱动程序。
    猜你喜欢
    • 2018-07-19
    • 2011-11-19
    • 2022-11-24
    • 1970-01-01
    • 1970-01-01
    • 2020-04-22
    • 2014-07-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多