Linux下编译mongodb以及C++客户端驱动
2013-10-14 17:06
471 查看
想在Linux下编译一下mongo和它的C++驱动,网上一堆教程,官方一堆文档,实现起来依旧困难重重。我就很纳闷了,本来mongodb就是C++写的,为什么不直接提供出驱动,而java,C#之类的,倒是直接提供了jar包和dll文件。今天终于编译成功,赶紧记录下来。Linux版本:CentOS 5.4C++驱动版本:mongo-cxx-driver-v2.2Mongodb版本:mongodb-src-r2.2.6Python版本:Python-2.7.5scons版本:scons-src-2.3.0boost版本:boost_1_49_0步骤:1. 升级boostcentos5.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 isVersion 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…时间有点长,可以先出去抽个烟,上个厕所。然后执行命令: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.tgztar zxf mongodb-linux-x86_64-v2.2-latest.tgzcd mongo-cxx-driver-v2.2sconsscons installldconfig /usr/local/lib安装成功!测试一下吧:首先启动mongo数据库:
[root@localhost mongo]# cd /usr/local/mongo/bin [root@localhost bin]# ./mongo MongoDB shell version: 2.2.6 connecting to: test Mon Oct 14 15:46:25 Error: couldn't connect to server 127.0.0.1:27017 src/mongo/shell/mongo.js:91 exception: connect failed [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 这个错误,我把数据库文件路径定义在了
/usr/local/mongo/data/db下面,需要自己建data、db两个文件夹。
启动成功后,进入mongo-cxx-driver-v2.2目录下的src目录,建立一个测试文件test.cpp
#include<cstdlib> #include<iostream> #include"mongo/client/dbclient.h" void run(){ mongo::DBClientConnection c; c.connect("localhost");} int main() { try{ run(); std::cout <<"connected ok"<< std::endl; }catch(const mongo::DBException&e ){ std::cout <<"caught "<< e.what()<< std::endl;} return EXIT_SUCCESS; }执行:g++ test.cpp -lmongoclient -lboost_thread -lboost_filesystem -lboost_program_options
生成a.out文件
[root@localhost src]# ./a.out ./a.out: error while loading shared libraries: libboost_thread.so.1.49.0: cannot open shared object file: No such file or directory [root@localhost src]# cd .. [root@localhost mongo-cxx-driver-v2.2]# ldconfig /usr/local/lib出现error while loading shared libraries: libboost_thread.so.1.49.0: cannot open shared object file: No such file or directory这个错误,是因为我没有执行
ldconfig /usr/local/lib,执行完以后,再试一下:
[root@localhost src]# ./a.out connected ok再试试mongodb自带的例子,进入mongodb-src-r2.2.6/src/mongo/client/examples
[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 [root@localhost examples]# ./first using cursor { "_id" : { "$oid" : "525bb336ab8ef21b5b7886db" }, "name" : "eliot", "num" : 15 } { "_id" : { "$oid" : "525bb336ab8ef21b5b7886dc" }, "name" : "sara", "num" : 23 } 0 { "_id" : { "$oid" : "525bb336ab8ef21b5b7886db" }, "name" : "eliot", "num" : 15 } 1 {} [root@localhost examples]#成功了,现在你可以开始用c++编写操作mongoDB的程序
参考文档:
http://lingzhi007.iteye.com/blog/1844127
http://blog.sina.com.cn/s/blog_77c35cff01018qzt.html
http://www.cnblogs.com/logicbaby/archive/2011/07/04/2097697.html
http://www.cnblogs.com/mobileinternet/archive/2012/08/31/2665144.html
相关文章推荐
- Linux 与 Windows 对UNICODE 的处理方式
- Ubuntu12.04下QQ完美走起啊!走起啊!有木有啊!
- 解決Linux下Android开发真机调试设备不被识别问题
- Ubuntu Linux使用体验
- PHP添加yaf xhprof mongodb 同理
- mongodb安装
- c语言实现hashmap(转载)
- Linux 信号signal处理机制
- linux下mysql添加用户
- 关于指针的一些事情
- Scientific Linux 5.5 图形安装教程
- 基于 Linux 集群环境上 GPFS 的问题诊断
- 谁是桌面王者?Win PK Linux三大镇山之宝
- vivi下重新调整分区
- Linux VS Unix:Linux欲一统天下 Unix不死
- linux下设定环境变量
- Linux下修改MySQL编码的方法
- Linux串口通信
- 从Windows系统下访问Linux分区相关软件