4

我已经下载了最新的 MongoDB C++ 驱动程序http://downloads.mongodb.org/cxx-driver/mongodb-linux-x86_64-2.5.2.tgz。当我做'scons'时,它构建得很好。建设完成后,我得到以下信息:

ranlib build/libmongoclient.a
Install file: "build/libmongoclient.a" as "libmongoclient.a"
scons: done building targets.

它说它安装了 mongo,但我想将 lib 和头文件安装在适当的位置,例如 /usr/local。无论我尝试什么(scons 安装,带或不带 --prefix),它都不想将它安装在 /usr/local 中。事实上,它说安装目标是最新的:

$sudo scons install --prefix=/usr/local
scons: Reading SConscript files ...
Checking for C++ library boost_thread-mt... (cached) yes
Checking for C++ library boost_filesystem-mt... (cached) yes
Checking for C++ library boost_system-mt... (cached) yes
Checking for sasl_version_info(0, 0, 0, 0, 0, 0) in C library sasl2... (cached) yes
Checking for C++ header file execinfo.h... (cached) yes
Checking whether backtrace is declared... (cached) yes
Checking whether backtrace_symbols is declared... (cached) yes
Checking whether backtrace_symbols_fd is declared... (cached) yes
scons: done reading SConscript files.
scons: Building targets ...
scons: `install' is up to date.
scons: done building targets.

我应该使用其他参数来安装它吗?对于库,我可以复制它,但是手动安装标题会更加乏味。

4

3 回答 3

6

目前安装 MongoDB C++ 驱动程序的最佳方式是去官方github 存储库并阅读“下载和编译”wiki 页面

存储库有三个分支(两个当前提供稳定的发布流)。第一个稳定版本系列名为26compat(与 MongoDB 2.6 兼容),它的源代码是从 MongoDB 的 2.6 版本中提取的(以及一些小的修改以使其独立)。它旨在替代围绕 C++ 驱动程序构建的现有代码。

另一个稳定版本系列名为legacy,它类似于 26compat 分支,但包含一些向后突破性的改进以及许多重要的改进和修复。这是新项目的正确起点。使用旧的“服务器驱动程序”或 26compat 驱动程序的现有项目也应该旨在升级到稳定的旧版本系列。

如果您有兴趣,可以在此处阅读有关更改的更多信息,但总的来说,您现在可以更好地使用我们在 github 存储库中提供的内容。虽然 C++ 驱动程序之前通过服务器源在技术上是可用的,但它并不是真正打算在 MongoDB 外部使用。现在,我们在官方存储库中提供的代码旨在供外部使用并由 C++ 驱动程序团队支持。

我们还在主分支上为 C++11 构建一个全新的驱动程序,但尚未准备好生产。我们鼓励您尝试它并提供反馈。

于 2014-06-15T22:58:27.047 回答
3

编辑:这篇文章获得了大量流量,但描述了如何构建现已正式过时的“Legacy C++”驱动程序。旧版 C++ 驱动程序已被新的 C++11 驱动程序淘汰。在用 C++ 编写将与 MongoDB 通信的客户端应用程序时,新的 C++11 驱动程序应该是首选。有关如何构建新的 C++11 驱动程序的信息可在此处获得:

https://github.com/mongodb/mongo-cxx-driver/wiki/Quickstart-Guide-(New-Driver)

编辑:请注意,此答案已过时。以下 Tyler 的答案是 C++ 驱动程序的所有现代用户的正确答案。

我建议不要尝试使用 2.5 版本(或者,就此而言,2.4 版本)中的 C++ 驱动程序 tarball 来构建驱动程序库。

构建 C++ 驱动程序的最佳方式是从完整的 mongodb 源代码存档。这有几个原因,但最重要的是 tarball 构建只提供了一个非常小的构建系统。正如您所注意到的,它没有“安装”目标。另一个限制是 tarball 构建不能生成共享对象,而完整源可以。

以下是从主要 mongodb 源构建 C++ 驱动程序的一些基本说明:

  • 从https://github.com/mongodb/mongo克隆 mongodb 源
  • scons --prefix=<path-to-install> --full --use-system-all install-mongoclient
  • 如果你想要一个共享库(在最新的 2.4 和最新的 2.5 中支持),添加--sharedclient到上面的行。
  • 如果您想要库的调试版本,请通过--dd(2.4) 或--dbg=on(2.5 tip of trunk)。

--use-system-all标志非常重要:使用它会禁止针对主要 mongodb 源附带的 boost 和 pcre 等版本的供应商进行构建。您不希望您的库针对这些库构建,因为生成的库不适合与针对这些库的系统版本构建的应用程序混合。这在使用--sharedclient.

上述问题的一个挑战是,当使用 构建时--use-system-all,构建系统会检查系统上是否存在各种库。其中一些库(如 v8)可能不可用。在 2.4 上,您必须安装适用版本的库,或者编辑 SConstruct 以禁止查找库的 CheckLib 调用。在 2.5 上,这不是问题,因为如果您尝试构建依赖于缺失库的目标,缺失库只会导致构建失败。由于构建 C++ 客户端驱动程序仅依赖于少量库(如 boost),因此更容易开始工作。

我还建议首先使用测试--prefix参数进行构建,以确保安装操作符合您的预期。

希望这可以帮助。

于 2013-09-19T19:34:23.640 回答
0

不幸的是,该库不会自动安装。它已编译,因此您可以将库与您的应用程序一起分发。不建议包含 cpp 或使用 tarball 文件。

请参阅此链接中的文档:http: //docs.mongodb.org/ecosystem/tutorial/download-and-compile-cpp-driver/#download-and-compile-cpp-driver

最好的,查理

于 2013-09-17T19:41:55.253 回答