在VS2013中使用boost庫遇到的問題及解決

最近的項目須要集成一個使用了boost庫的開源庫。本來應該是比較簡單的工做,由於使用的是VS2013,而boost庫是最新下載的1.60.0版本(注:寫這篇文章時1.61.0恰好release),結果仍是費了一點工夫。如今把它記下來,給本身留個記錄備查吧。html

通過這麼久的發展,boost庫其實用起來已經很簡單了。首先下載新版本的包。在windows下,用zip格式的包是最方便的。而後隨便解壓到一個目錄下,我是解壓到了D盤,完成後boost庫就放在D:\boost_1_60_0目錄下了。bootstrap

接下來就能夠編譯boost庫了。在命令行下進入D:\boost_1_60_0,運行bootstrap.bat進行配置。配置完成後,顯示的提示是運行剛生成的b2.exe便可進行編譯。網上一些舊的教程說的是運行bjam.exe,這也是能夠的,由於這兩個文件其實徹底同樣,boost多是爲了兼容之前的使用習慣,生成exe後更名複製了一份。windows

編譯的時間較長,但只要以前VS已經正常安裝和使用,總會編譯完成的。結束後,提示以下:ui

The Boost C++ Libraries were successfully built!spa

The following directory should be added to compiler include paths:命令行

    D:\boost_1_60_0htm

The following directory should be added to linker library paths:教程

    D:\boost_1_60_0\stage\libip

這兩個目錄就是頭文件包含目錄和庫文件查找目錄了,把它們加到本身的VS工程的相應配置項裏,就可使用boost庫了。get

到目前爲止彷佛一切正常,但一啓動工程的編譯,馬上有大量報錯出現,並且所有是boost的頭文件報錯。怎麼回事,難道boost有問題?仔細檢查報錯信息,看起來和新的C++規範的支持有關。搜索一些資料瞭解了一下,基本上肯定是由於最新的boost庫使用了C++14規範,而VS2013要在update5以後才支持C++14,因此出錯了。難怪boost編譯過程當中出現了大量的error,雖然最後仍是編譯完了,但仍是提示有部分項目是fail和skip了的。

那麼如何解決呢?由於VS2013的update5有6G這麼大,一開始實在不想下載,因此考慮可否換用舊一些版本的boost。通過一些嘗試,最後放棄了這一方案,由於比較新的boost已經用了新規範了,而太舊的boost又沒有工程須要的功能。因此仍是老老實實的下載update5吧,微軟官網上好象已經沒有鏈接了,好在找到了https://go.microsoft.com/fwlink/?LinkId=519391這個鏈接,仍然能夠下載,並且速度還不錯。

下載完成,安裝升級VS2013到update5,從新編譯boost,此次沒有error了,雖然仍是有warning,可是不影響。

接下來打開工程編譯,果真沒有編譯錯誤了!一路順利到連接階段,又報了個錯誤:找不到libboost_system-vc120-mt-sgd-1_60.lib這個庫。檢查了boost的庫文件目錄,確實沒有這個庫,但有一個libboost_system-vc120-mt-gd-1_60.lib。這是什麼狀況呢?

查了一下這兩個庫的狀況,知道帶s的庫是用在靜態庫鏈接的工程中(命令行參數爲/MT和/MTd),不帶s的用在動態庫工程中(/MD和/MDd)。有一種方案是提議改用/MD參數,這也太將就了吧......

其實完全解決這個問題並不難,用「b2 --build-type=complete」再徹底編譯一次boost就能夠了,這個參數是要求boost生成全部的項目,而以前不加參數默認是最小生成模式。

相關文章
相關標籤/搜索