mongodb 與 c++ 的配合使用

  最近在嘗試使用 mongodb 做爲服務端持久化方案,服務端程序是使用 c++ 寫的,折騰了很多時間,記錄一下吧。html

一、下載 boost 1.56.0python

http://www.boost.org/users/history/version_1_56_0.htmlios

 

二、下載 mongo-cxx-driver-legacy-1.0.2c++

https://github.com/mongodb/mongo-cxx-driver/releases/tag/legacy-1.0.2git

 

三、還有其它的一些限制條件,如 gcc 4.8.2 ,安裝 scons ,python 2.7.9github

 

四、先升級好 gcc,將注意在 /usr/bin 目錄下作好 cc/c++/gcc/g++ 的軟連接,且將 libstdc++.so.6 文件複製到 /usr/lib64 目錄下;而後安裝 boost,將默認安裝在 /usr/local/lib/ 目錄下的動態庫複製到 /usr/lib64 目錄下。mongodb

 

五、解壓 mongo-cxx-driver-legacy-1.0.2 進入目錄後進行編譯:api

scons all -j8

編譯後生成的頭文件和靜態庫存放在 build/install/ 目錄下,這些都是 mongodb 的 c++ 驅動程序最終須要的。測試

 

六、編寫測試代碼 test.cpp :ui

#include <iostream>
#include "mongo/client/dbclient.h"

int main() {
    try
    {
        mongo::DBClientConnection conn;
        conn.connect("127.0.0.1");
        std::cout<<"connected ok"<<std::endl;
    } catch(mongo::DBException &e)
    {
        std::cout <<e.what()<<std::endl;
    }
}

  編譯此測試代碼的命令爲:

g++ test.cpp -I include/ -L lib/ -lmongoclient -lboost_system -lboost_regex -lboost_thread

  注意,此處省略了一些簡單的細節,如 include 目錄下存放了 mongo 和 boost 的頭文件,lib 目錄下存放了後面指明的四個連接庫。

  更多使用方法,請參考官方資料:https://github.com/mongodb/mongo-cxx-driver/wiki/Tutorial

  詳細的API,請參考:http://api.mongodb.org/cxx/legacy-1.0.0/namespacemongo.html

  

 

七、遇到了哪些問題?

  GCC\BOOST版本太高或太低時,都會有問題,而這個問題是很難排查的,若是自己機器上就存在不一樣版本的GCC/BOOST,那麼升級時必定要注意順序:先升級PYTHON,再安裝好SCONS,再升級GCC並配置好環境,再用新的GCC去編譯BOOST,用新的BOOST徹底替換掉系統中本來存在的BOOST(不然可能編譯過了,但運行會出現段錯誤;或者在連接 boost_thread 時出錯,只能連接 boost_thread-mt ,但後者會影響到使用BOOST寫的服務端底層的編譯)

 

八、還有一些有待進一步深刻的問題

  mongodb 的 c++ 驅動有四個版本(實質上應該是三個),一是咱們如今使用的 legacy 版本;二是 26compat 版本;三是使用 c++11 重寫的新版本;四是 mongodb 開源程序中自帶了 c++ 驅動,應該是前面三種中的一種。

  理論上應該使用 c++11 的新版本,這樣或者就能夠把GCC/BOOST都升到最高版本,是將來的趨勢。但得等有時間才能去折騰了,暫時先這樣用着吧。

  全部的 mongo-cxx-driver 能夠在下面的地址下載:

https://github.com/mongodb/mongo-cxx-driver

 

九、封裝

  封裝以方便使用,待補充。

相關文章
相關標籤/搜索