Linux下编译mongodb以及C++客户端驱动

想在Linux下编译一下mongo和它的C++驱动,网上一堆教程,官方一堆文档,实现起来依旧困难重重。我就很纳闷了,本来mongodb就是C++写的,为什么不直接提供出驱动,而java,C#之类的,倒是直接提供了jar包和dll文件。今天终于编译成功,赶紧记录下来。

Linux版本:CentOS 5.4

C++驱动版本:mongo-cxx-driver-v2.2

Mongodb版本:mongodb-src-r2.2.6

Python版本:Python-2.7.5

scons版本:scons-src-2.3.0

boost版本:boost_1_49_0


步骤:

1. 升级boost

centos5.4自带了boost,但版本过老,需要进行升级:
rpm -qa boost* # 先查一下安装的版本
rpm -e xxxx # 卸载之

去boost官网下载boost库,推荐1.49版本,注意,作者第一次下载了1.54版本的boost,后来在编译C++驱动的时候,死活编译不过去,出现error: #error Compiling Filesystem version 3 file with BOOST_FILESYSTEM_VERSION defined != 3的错误,Boost官网http://www.boost.org/doc/libs/1_51_0/libs/filesystem/doc/index.htm有这么一段话:This is Version 3 of the Filesystem library. Version 2 is not longer supported. 1.49.0 was the last release of Boost to supply Version 2。
最后又重新安装的1.49版本的。


下载boost_1_49_0.tar.bz2
解压后,执行
$ cd boost_1_49_0
$ ./bootstrap.sh

$ ./b2

$ sudo ./b2 install

时间有点长,可以先出去抽个烟,上个厕所。

2.升级python

参考:http://www.netingcn.com/centos-python-upgrade.html

http://running.iteye.com/blog/1122370

3.安装scons

下载scons-2.3.0-1.noarch.rpm ( http://www.scons.org/download.php )

安装:

  1. #rpm -uvh scons-2.2.0-1.noarch.rpm  

4. 编译mongodb

从官网上面下载mongo源码(http://www.mongodb.org/downloads),下载的版本是mongodb-src-r2.2.6.tar.gz

解压缩之后生成mongodb-src-r2.2.6目录,cd到这个目录
然后执行命令:
scons --prefix=/usr/local/mongo --full install
到时候会在/urs/local/mongo生成三个目录bin,include,lib
其中:
bin下包含mongo的服务端和客户端,还有其他的一些工具
include是mongo的头文件
lib是客户端的库,这里生成的cpp的客户端库
注意,在这里,lib目录下并没有生成期待的libmongoclient.a,这里会出现一个错误,导致编译的终止,但并不影响最终使用。编译工作到此为止。libmongoclient.a生成到了mongodb-src-r2.2.6目录下。手动把libmongoclient.a拷贝到lib下吧。
实际上这已经把C++客户端驱动生成了。

5.编译C++客户端V2.2驱动

下载:wget http://downloads.mongodb.org/cxx-driver/mongodb-linux-x86_64-v2.2-latest.tgz

tar zxf mongodb-linux-x86_64-v2.2-latest.tgz
cd mongo-cxx-driver-v2.2
scons
scons install
ldconfig /usr/local/lib

安装成功!

测试一下吧:

首先启动mongo数据库:

  1. [root@localhost mongo]# cd /usr/local/mongo/bin  
  2. [root@localhost bin]# ./mongo  
  3. MongoDB shell version: 2.2.6  
  4. connecting to: test  
  5. Mon Oct 14 15:46:25 Error: couldn't connect to server 127.0.0.1:27017 src/mongo/shell/mongo.js:91  
  6. exception: connect failed  
  7. [root@localhost bin]# ./mongod -dbpath=/usr/local/mongo/data/db  
出现couldn't connect to server 127.0.0.1:27017 src/mongo/shell/mongo.js:91 这个错误,我把数据库文件路径定义在了
  1. /usr/local/mongo/data/db下面,需要自己建data、db两个文件夹。  
  1. 启动成功后,进入mongo-cxx-driver-v2.2目录下的src目录,建立一个测试文件test.cpp
  1. #include<cstdlib>  
  2. #include<iostream>  
  3. #include"mongo/client/dbclient.h"  
  4. void run(){  
  5.   mongo::DBClientConnection c;  
  6.   c.connect("localhost");}  
  7. int main()  
  8. {  
  9. try{  
  10.     run();  
  11.     std::cout <<"connected ok"<< std::endl;  
  12. }catch(const mongo::DBException&e ){  
  13.     std::cout <<"caught "<< e.what()<< std::endl;}  
  14. return EXIT_SUCCESS;  
  15. }  
  16. 执行:g++ test.cpp -lmongoclient -lboost_thread -lboost_filesystem -lboost_program_options  
  1. 生成a.out文件
  1. [root@localhost src]# ./a.out  
  2. ./a.out: error while loading shared libraries: libboost_thread.so.1.49.0: cannot open shared object file: No such file or directory  
  3. [root@localhost src]# cd ..  
  4. [root@localhost mongo-cxx-driver-v2.2]# ldconfig /usr/local/lib</span>  
  5. 出现error while loading shared libraries: libboost_thread.so.1.49.0: cannot open shared object file: No such file or directory这个错误,是因为我没有执行
  6. [root@localhost src]# ./a.out   
  7. connected ok
  8. 再试试mongodb自带的例子,进入mongodb-src-r2.2.6/src/mongo/client/examples
  9. [root@localhost examples]# g++ first.cpp -I /usr/local/mongo/include -L /usr/local/mongo/lib/libmongoclient.a -lmongoclient -lboost_thread -lboost_filesystem -lboost_program_options -o first  
  10. [root@localhost examples]# ./first  
  11. 成功了,现在你可以开始用c++编写操作mongoDB的程序
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值