對C++有一定了解的同學(xué)一定聽說過boost庫区拳,這是C++的一個著名類庫渐苏,在C++的地位感覺可以和Spring在Java中相比呻畸。boost向來有準(zhǔn)標(biāo)準(zhǔn)庫之稱翩蘸,很多新特性例如智能指針等都是先在boost中實(shí)現(xiàn),后來被吸收到標(biāo)準(zhǔn)庫之中变汪。而且boost實(shí)現(xiàn)了日志侠坎、算法、日期裙盾、地理实胸、數(shù)學(xué)、線程協(xié)程等各種實(shí)用工具番官,所以如果要學(xué)習(xí)C++庐完,boost是必須要學(xué)習(xí)的一個東西。
安裝boost
下載boost
boost官網(wǎng)是http://www.boost.org/徘熔,目前最新的版本是1.68门躯,可以在這里下載。下載頁面里有Unix和Windows的源碼近顷,以及Windows版本的預(yù)編譯包生音。我們選擇預(yù)編譯下載。
然后會彈出SourceForge的頁面窒升,按照自己的系統(tǒng)版本和Visual Studio版本選擇最合適的版本下載缀遍,如果不確定的話,就下載all那個版本饱须,是是最全的同時也是最大的域醇。紅框標(biāo)的是適合Visual Studio 2017的64位boost庫版本。后綴exe的是自解壓安裝包蓉媳,下載之后打開它譬挚,選擇一個目錄,就會將預(yù)編譯的boost庫解壓到那里酪呻。
另外一種方式就是下載源碼减宣,下載完成后解壓到一個目錄,例如我就放到了D:\DevTools\boost_1_68_0
玩荠,目錄結(jié)構(gòu)如下圖漆腌。如果用下載源碼這種方式,那么后面必須執(zhí)行編譯這一個步驟阶冈。如果用的是預(yù)編譯版本闷尿,則不需要編譯。我推薦大家下載預(yù)編譯的版本女坑,因?yàn)榫幾g這個過程實(shí)在是太慢了填具,沒幾個小時下不來。
boost
目錄下是boost的頭文件匆骗,libs
下是boost的源代碼劳景。其他文件夾的內(nèi)容是文檔和一些工具等等,就不介紹了碉就。
添加環(huán)境變量
將你放置boost代碼的目錄設(shè)置為環(huán)境變量BOOST_ROOT
枢泰,這個目錄將在后面用到。
編譯boost庫
首先確保你安裝了Visual Studio 2017铝噩,并安裝了 Visual Studio 2017 Developer Command Prompt工具衡蚂。如果前面下載的是預(yù)編譯版本,則不需要這個步驟骏庸。
打開VS 2017 Developer Command Prompt毛甲,切換到boost目錄,執(zhí)行bootstrap.bat
腳本具被,如果執(zhí)行成功的話玻募,會生成b2.exe
等幾個工具,這樣生成工具的工作就完成了一姿。
然后簡單調(diào)用生成的b2.exe
就可以編譯boost庫了七咧。
b2.exe
這個過程可能會持續(xù)幾個小時時間跃惫,因?yàn)閎oost庫確實(shí)也是一個比較大的項(xiàng)目。當(dāng)然編譯這個步驟不是必須的艾栋,但是如果你想將來在項(xiàng)目中使用預(yù)編譯的boost類庫爆存,那么這里就需要編譯』壤或者也可以直接在下載的時候直接選擇下載預(yù)編譯的版本先较。
Visual Studio設(shè)置
項(xiàng)目設(shè)置
在VS中新建一個C++項(xiàng)目,然后打開項(xiàng)目屬性頁悼粮,然后切換到VC++目錄闲勺,在包含目錄和庫目錄中分別添加BOOST_ROOT
和BOOST_ROOT\libs
兩個文件夾。注意圖中的語法扣猫,拼寫正確才能正確將環(huán)境變量展開為實(shí)際路徑菜循。
然后打開鏈接器配置,在附加庫目錄中添加對應(yīng)的文件夾申尤。如果使用的是預(yù)編譯的boost债朵,添加安裝目錄中的libXX-msvc-XXX(根據(jù)你下載的版本而不同),如果是自己源碼編譯的boost瀑凝,添加stage\libs
目錄(這個是編譯之后生成的目錄)序芦。
配置完成后,就可以在項(xiàng)目中使用boost了粤咪。當(dāng)然對于Visual Studio來說谚中,還有更簡單的辦法,那就是使用NuGet寥枝。
使用NuGet添加
配置完之后宪塔,我還發(fā)現(xiàn)微軟的NuGet竟然也可以添加boost。方法很簡單囊拜,在項(xiàng)目菜單中點(diǎn)擊管理NuGet包某筐,然后搜索boost
,然后點(diǎn)擊右邊的下載按鈕即可冠跷。
由于boost是一個比較大的庫南誊,所以這個安裝過程可能需要多花費(fèi)幾分鐘。安裝完成后boost類庫會放到項(xiàng)目文件夾的package文件夾中蜜托。NuGet會自動幫我們做所有工作抄囚,我們接下來直接使用就可以了。
運(yùn)行boost程序
配置好之后橄务,就可以運(yùn)行boost程序了幔托。下面是一個簡單例子,使用了boost庫的一些高精度(最大可達(dá)100位)數(shù)學(xué)常量(值得吐槽的是C++標(biāo)準(zhǔn)庫居然沒有像樣的數(shù)學(xué)庫,能用的只有<cmath>
重挑,而且甚至連PI常量都沒有)嗓化。
#include <boost/math/constants/constants.hpp>
#include <boost/multiprecision/cpp_dec_float.hpp>
#include <iostream>
#include <iomanip>
using namespace std;
using namespace boost::math::constants;
using namespace boost::multiprecision;
int main()
{
cout << "圓周率是:" << setprecision(50) << pi<cpp_dec_float_50>() << endl;
cout << "自然對數(shù)e是:" << setprecision(50) << e<cpp_dec_float_50>() << endl;
cout << "根號2是:" << setprecision(50) << root_two<cpp_dec_float_50>() << endl;
return 0;
}
// 圓周率π是:3.1415926535897932384626433832795028841971693993751
// 自然對數(shù)e是:2.7182818284590452353602874713526624977572470937
// 根號2是:1.4142135623730950488016887242096980785696718753769