VS2017 + Windows10編譯C++ MongoDB驅動


轉載地址: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


免責聲明!

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



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