轉載地址:https://blog.csdn.net/sqcfj/article/details/86716831
mongoDB有兩個接口庫:mongo-c-driver和mongo-cxx-driver
前者是c代碼接口庫,后者是c++代碼接口庫,是在mongo-c-driver的基礎上進行二次封裝
一、准備工作
1、下載mongo-c-driver源碼:https://github.com/mongodb/mongo-c-driver/releases/tag/1.13.0(注意:3.4.0版本mongo-cxx-driver只能配1.13.0mongo-c-driver)
2、下載mongo-cxx-driver源碼:https://github.com/mongodb/mongo-cxx-driver/releases(3.4.0版本)
3、下載boost:https://www.boost.org/users/history/version_1_70_0.html(此為下載源碼,需要自己編譯 )
4、安裝boost:https://blog.csdn.net/s_lisheng/article/details/72871218(建議直接https://sourceforge.net/projects/boost/files/boost-binaries/1.68.0/下載安裝編譯好的boost_1_68_0-msvc-14.0-64.exe安裝包 )
二、boost編譯
下面為編譯boost步驟:(這個其實沒有必要,可以跳過,全當體驗編譯過程。。。)
在根目錄下運行bootstrap.bat
生成了這兩個東西
然后修改這個配置文件
改成這樣(話說也不知道有什么用)
# Boost.Build Configuration # Automatically generated by bootstrap.bat import option ; using msvc : 14.0 : "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.13.26128\bin\Hostx64\x64\cl.exe"; option.set keep-going : false ;
然后在開始菜單VS2017工具包下運行命令(隨便打開一個CMD會找不到xxx文件錯誤......):
b2 stage --toolset=msvc-14.0 address-model=64 --stagedir="E:\Library\boost_1_70_0\bin\VC14" threading=multi --build-type=complete
參數按照博主的說明設置
這個編譯需要一些時間,可以睡一覺......
編譯完成......內容和.exe安裝解壓后的是一樣的,就是版本更新一點
三、mongo-c-driver-1.13.0編譯
由於源碼中已經有了build文件夾,為了不和其中的混合,新建cmake-build,在此目錄下打開cmd或power shell,指向以下命令(文件目錄替換成自己的)
cmake -G "Visual Studio 15 2017 Win64" "-DCMAKE_INSTALL_PREFIX=E:\Library\mongo-c-driver-1.13.0" "-DCMAKE_PREFIX_PATH=E:\Library\mongo-c-driver-1.13.0" ..
然后生成就會生成解決方案,打開.sln文件,選擇32或64位,分別編譯生成ALL_BUILD, INSTALL兩個項目
至此第一個c驅動編譯完成,在根目錄下已生成bin, build, lib文件夾
四、mongo-cxx-driver-r3.4.0編譯
編譯第二個c++驅動,此時需要用到boost庫(這里使用的.exe安裝的boost),步驟基本相同,源碼中有空的build目錄,就直接在這里編譯了
cmake -G "Visual Studio 15 2017 Win64" "-DCMAKE_INSTALL_PREFIX=E:\Library\mongo-cxx-driver-r3.4.0" "-DCMAKE_PREFIX_PATH=E:\Library\mongo-c-driver-1.13.0" "-DBOOST_ROOT=E:\Library\boost_1_67_0" ..
然后和步驟和上面一樣,打開.sln解決方案,分別ALL_BUILD, INSTALL,等待生成三個文件夾
第二個c++驅動編譯編譯完成
使用的時候,需要將mongo-cxx-driver生成的include目錄和mongo-cxx-driver生成的include目錄,以及boost庫目錄都添加進去,鏈接上述生成的lib文件,並且把生成的dll放到可執行文件一起就可以了。到此windows平台下C++版本的mongo driver編譯完成。
只有自己編譯boost的過程比較麻煩,但可以選擇使用現成的編譯好的安裝包
然后注意c和c++驅動的版本對應問題,應該不會有什么錯誤
五、重要說明
我在編譯完成了以上兩個庫之后,在配置使用c++驅動時報了bsoncxx/types.hpp頭文件錯誤,在該文件中所有的該結構體type_id初始化失敗
1 struct BSONCXX_API b_utf8 { 2 static constexpr auto type_id = type::k_utf8; 3 4 /// 5 /// Constructor for b_utf8. 6 /// 7 /// @param value 8 /// The value to wrap. 9 /// 10 template <typename T, 11 typename std::enable_if<!std::is_same<b_utf8, typename std::decay<T>::type>::value, 12 int>::type = 0> 13 BSONCXX_INLINE explicit b_utf8(T&& t) : value(std::forward<T>(t)) {} 14 15 stdx::string_view value; 16 17 /// 18 /// Conversion operator unwrapping a string_view 19 /// 20 BSONCXX_INLINE operator stdx::string_view() const { 21 return value; 22 } 23 };
最后不得不放棄使用c++驅動,而使用c驅動,具體demo可以參考c驅動API,倒是更為簡潔一點。具體操作見 MongoDB C Driver Tutorial。