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