无法针对Fedora中的mongo C ++驱动程序进行编译

时间:2018-07-21 09:33:48

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

我无法编译使用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环境变量Package'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                ^ ~~~~~~~~~~~~~~~~~~~~~ p

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

感谢您的帮助,

D。

1 个答案:

答案 0 :(得分:1)

您正在尝试混合使用旧的C ++驱动程序和新的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 ++驱动程序时使用。