最近在嘗試使用 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
九、封裝
封裝以方便使用,待補充。