如何为Ubuntu安装MongoDB C ++驱动程序?

时间:2013-09-15 10:18:57

标签: c++ mongodb ubuntu

我已经下载了最新的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.

我应该使用其他参数进行安装吗?对于库,我可以复制它,但手动安装标题会更加繁琐。

3 个答案:

答案 0 :(得分:5)

目前安装MongoDB C ++驱动程序的最佳方法是转到官方github repository并阅读"Download and Compile" wiki page

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

另一个稳定版本系列名为legacy,它类似于26compat分支,但包含一些落后的改进和许多重要的改进和修复。这是correct starting point for new projects。现有项目使用旧的"服务器驱动程序"或者26compat驱动程序也应该旨在升级到稳定的旧版本系列。

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

我们还在主分支上为C ++ 11构建entirely new driver,但尚未准备好生产。我们鼓励您尝试并提供反馈。

答案 1 :(得分:3)

编辑:此帖子获得了大量流量,但介绍了如何构建现已正式过时的“Legacy C ++”驱动程序。 Legacy 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版本中的C ++驱动程序tarball(或者,就此而言,在2.4版本中)来构建驱动程序库。

构建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行李干线)。

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

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

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

希望这有帮助。

答案 2 :(得分:0)

不幸的是,库没有自动安装。它已编译,因此您可以使用您的应用程序分发库。不建议包括cpp或使用tarball文件。

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

最佳, 查理