CentOS 6.5编译MongoDB的C++驱动比较繁琐,鉴于今天编译成功,PO文一篇,记录编译过程:
阅读者要求:对Linux熟悉,小白请绕路。
编译环境各软件版本:
GCC 4.8.2
Boost 1.49
MongoDB v3.2.8
C++ Driver:MongoDB Legacy C++ Driver 1.1.2
Python 2.7.12
scons 2.4.1
1:安装mongodb
1.1:创建文件:/etc/yum.repos.d/mongodb-org-3.2.repo
内容为:
[mongodb-org-3.2] name=MongoDB Repository baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.2/x86_64/ gpgcheck=1 enabled=1 gpgkey=https://www.mongodb.org/static/pgp/server-3.2.asc
1.2:通过yum进行安装
yum install -y mongodb-org-3.2.8 mongodb-org-server-3.2.8 mongodb-org-shell-3.2.8 mongodb-org-mongos-3.2.8 mongodb-org-tools-3.2.8
1.3:开启,关闭,重启MongoDB
service mongod start #开启 service mongod stop #关闭 service mongod restart #重启 service mongod status #查看mongod状态 chkconfig mongod on #开机自启动
1.4:配置MongoDB
配置文件是:/etc/mongod.conf,可自行进行配置
2:升级Python
自带的Python版本略低,我们升级到Python 2.7.12
参考文章:http://www.jyguagua.com/?p=2146
3:升级GCC
自带的GCC不支持C++ 11新特性,为了支持C++ 11,我们升级GCC至GCC 4.8.2
参考文章:http://www.jyguagua.com/?p=2191
4:安装Scons
下载scons的rpm安装包,然后通过rpm方式进行安装。
下载地址:http://scons.org/pages/download.html
rpm -ivh scons-2.4.1-1.noarch.rpm
5:安装Boost
参考:
[原创]CentOS 6.5安装boost 1.49
6:下载mongo-cxx-driver,采用scons进行编译
git clone -b legacy https://github.com/mongodb/mongo-cxx-driver.git cd mongo-cxx-driver/ scons --c++11=on --sharedclient --use-sasl-client --ssl install
可能遇到编译的错误:
Couldn't find SASL header/libraries
See /root/cpp_mongodb/git-mongo/mongo-cxx-driver/build/scons/config.log for details
解决办法:
yum install pkg-config openssl-devel cyrus-sasl-devel
编译好的文件放置在build目录之中。
然后把编译安装好的mongodb的头文件,库拷贝到/usr/include和/usr/lib目录之中:
在build目录install之中,将include下的mongo文件夹(mongo-cxx-driver/build/install/include)拷贝至/usr/include,以及将mongo-cxx-driver/build/install/lib目录里的库文件拷贝至/usr/lib目录下
cd build/install/include \cp -rf mongo/ /usr/include/ cd ../lib/ cp libmongoclient.* /usr/lib cp libmongoclient.* /usr/lib64/
7:测试代码:
#include <iostream> #include "mongo/client/dbclient.h" // for the driver void run() { mongo::DBClientConnection c; c.connect("localhost"); } int main() { mongo::client::initialize(); try { run(); std::cout << "connected ok" << std::endl; } catch( const mongo::DBException &e ) { std::cout << "caught " << e.what() << std::endl; } return EXIT_SUCCESS; }
编译命令:
g++ -std=c++0x tutorial.cpp -pthread -lmongoclient -lboost_thread -lboost_system -lboost_regex -o tutorial
执行效果:
命令:
g++ -g -std=c++0x tutorial.cpp -pthread -lmongoclient -lboost_thread -lboost_system -lboost_regex -o tutorial
然后通过gdb命令进行debug即可,根据debug的结果进行问题检查。
文章的脚注信息由WordPress的wp-posturl插件自动生成