mongodb 與 c++ 的配合使用


  最近在嘗試使用 mongodb 作為服務端持久化方案,服務端程序是使用 c++ 寫的,折騰了不少時間,記錄一下吧。

1、下載 boost 1.56.0

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

 

2、下載 mongo-cxx-driver-legacy-1.0.2

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

 

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

 

4、先升級好 gcc,將注意在 /usr/bin 目錄下做好 cc/c++/gcc/g++ 的軟鏈接,且將 libstdc++.so.6 文件復制到 /usr/lib64 目錄下;然后安裝 boost,將默認安裝在 /usr/local/lib/ 目錄下的動態庫復制到 /usr/lib64 目錄下。

 

5、解壓 mongo-cxx-driver-legacy-1.0.2 進入目錄后進行編譯:

scons all -j8

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

 

6、編寫測試代碼 test.cpp :

#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

  

 

7、遇到了哪些問題?

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

 

8、還有一些有待進一步深入的問題

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

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

  所有的 mongo-cxx-driver 可以在下面的地址下載:

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

 

9、封裝

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM