Windows平臺下boost庫的編譯和調用

視頻教程:https://www.bilibili.com/video/av97877351/

下載

編譯

  • 查看VS版本(即編譯器版本)

打開任意VS工程:VS->Project->Properties::Genneral::Plateform Toolset(VS2015為v140)

  • 打開VS的命令行窗口

在開始菜單的VS菜單項里打開“Developer Command Prompt for VS2015”膘螟,進入boost目錄

  • 命令行窗口執(zhí)行bootstrap.bat

命令行運行bootstrap.bat峡扩,會在根目錄下生產bjam.exe佩迟,b2.exe(bjam的升級版),project-config.jambootstrap.log四個文件

  • 命令行窗口使用bjam編譯所需的boost庫
//示例-編譯除boost::python庫之外的boost庫
bjam stage --toolset=msvc-14.0 --without-python --stagedir="E:\Learning\Boost" link=static runtime-link=shared threading=multi address-model=64

會在E:\Learning\Boost下生成一個lib目錄,目錄里是編譯好的boost的lib庫

bjam編譯參數說明

stage/install:stage表示只生成庫,install還會生成包含頭文件的include目錄桌吃,但編譯時間較長;默認是stage苞轿。

--stagedir/prefix:stage時使用stagedir茅诱,install時使用prefix,表示編譯生成文件的路徑搬卒。

bjam install --toolset=msvc-14.0 --without-python --prefix="E:\Learning\Boost" link=static runtime-link=shared threading=multi address-model=64

--build-type:complete 編譯所有boost庫瑟俭;默認complete。

bjam stage --toolset=msvc-14.0 --build-type=complete --stagedir="E:\Learning\Boost" link=static runtime-link=shared threading=multi address-model=64

--without/with:選擇不編譯/編譯哪些庫契邀。默認是全部編譯摆寄。

查看boost包含庫的命令是bjam --show-libraries

//boost::python lib
bjam stage --toolset=msvc-14.0  --with-python --stagedir="E:\Learning\Boost" link=static threading=multi address-model=64

--toolset:指定編譯器,可選的如borland坯门、gcc微饥、msvc-14.0(VS2025)等。

link:生成動態(tài)鏈接庫/靜態(tài)鏈接庫古戴。

  • static只會生成lib文件欠橘。
  • shared會生成lib文件和dll文件。
bjam stage --toolset=msvc-14.0 --build-type=complete --stagedir="E:\Learning\Boost" link=shared runtime-link=shared threading=multi address-model=64
7.png

runtime-link:動態(tài)/靜態(tài)鏈接C/C++運行時庫现恼。同樣有shared和static兩種方式肃续。

threading:單/多線程編譯∈蜷荩現在基本都是multi方式了。

address-model:64位平臺還是32位平臺痹升,不填就兩種平臺的庫都會編譯建炫。

debug/release:debug版本,release版本疼蛾,不填就兩種版本的庫都會編譯。

bjam stage --toolset=msvc-14.0  --with-atomic --stagedir="E:\Learning\Boost" link=static threading=multi address-model=64 debug

boost庫的命名特點

//link=static runtime-link=shared
libboost_atomic-vc140-mt-gd-x64-1_69.lib
libboost_atomic-vc140-mt-x64-1_69.lib
//link=static runtime-link=static
libboost_atomic-vc140-mt-sgd-x64-1_69.lib
libboost_atomic-vc140-mt-s-x64-1_69.lib
//link=shared runtime-link=shared
boost_atomic-vc140-mt-gd-x64-1_69.dll
boost_atomic-vc140-mt-gd-x64-1_69.lib
boost_atomic-vc140-mt-x64-1_69.dll
boost_atomic-vc140-mt-x64-1_69.lib

開頭_庫名稱-編譯器版本-[多線程]-[static版本][debug版本]-平臺-版本號

  • 開頭:以“l(fā)ib”開頭的是“l(fā)ink=static”版本(靜態(tài)鏈接庫版本艺配,沒有dll)察郁,而直接以“boost”開頭的是“l(fā)ink=shared”版本(動態(tài)鏈接庫版本,包含lib和dll)转唉。
  • 庫名稱:其后的是boost庫名稱(比如date_time庫)皮钠。
  • 編譯器的版本:與庫名稱之間以"-"而不是下劃線"_"分隔(比如 -vc140)。
  • [多線程]:有“mt”的為“threading=multi”版本赠法,沒有該項則是“threading=single”版本麦轰。
  • [static版本]:有“s”的為“runtime-link=static”版本,沒有該項則是“runtime-link=shared”版本砖织。
  • [debug版本]:有“gd”的為debug版本款侵,沒有的則是release版本。
  • 平臺:x64或x32
  • 版本號:所有的庫都含有boost庫的版本號結尾

link參數和runtime-link的組合

link runtime-link 運行要求 應用工程設置
static static libboost_atomic-vc140-mt-sgd-x64-1_69.lib libboost_atomic-vc140-mt-s-x64-1_69.lib /MTd/MT
static shared libboost_atomic-vc140-mt-gd-x64-1_69.lib libboost_atomic-vc140-mt-x64-1_69.lib /MDd/MD
shared shared boost_atomic-vc140-mt-gd-x64-1_69.dll boost_atomic-vc140-mt-gd-x64-1_69.lib boost_atomic-vc140-mt-x64-1_69.dll boost_atomic-vc140-mt-x64-1_69.lib
shared static 沒有這種組合

# VS工程的使用配置

  • VS建立win32的console工程
  • 工程設置-Properties(當前solution)
    • VC++ Directories::Include Diretorise加上boost根目錄
    • VC++ Directories::Library Diretoties加上boost編譯出來的lib目錄
  • 如果使用靜態(tài)方式連接boost::python和boost::numpy庫侧纯,需要在include這兩個模塊之前加上靜態(tài)標識
#define BOOST_PYTHON_STATIC_LIB
#define BOOST_NUMPY_STATIC_LIB
#include <boost/python.hpp>
#include <boost/python/numpy/ndarray.hpp>

示例

#include <iostream>
#include <boost/format.hpp>
#include <iomanip>


int main()
{
    std::cout << boost::format("%s:%d+%d=%d\n") % "sum" % 1 % 2 % (1 + 2);

    boost::format fmt("(%1% + %2%) * %2% = %3%\n");
    fmt % 2 % 5 %((2+5)*5);
    std::cout << fmt.str();

    fmt.parse("%|05d|\n%|-8.3|f\n%| 10S|\n%|05X|\n");
    std::cout << fmt % 62 % 2.236 % "123456789" % 48;

    fmt.clear();  
    //std::cout << fmt.str();  //error after call clear function
    std::cout << fmt % 56 % 1.125 % "987654321" % 32;

    boost::format fmtPro("%1% %2% %3% %2% %1% \n");
    std::cout << fmtPro % 1 % 2 % 3;

    fmtPro.bind_arg(2, 10);
    std::cout << fmtPro % 1 % 3;

    fmtPro.clear();
    std::cout << fmtPro % boost::io::group(std::showbase, std::oct, 111) % 333;

    fmtPro.clear_binds();
    fmtPro.modify_item(1, boost::io::group(std::hex, std::right, std::showbase, std::setw(8), std::setfill('*')));
    std::cout << fmtPro % 49 % 20 % 100;

    std::cout << 1 / 2;

    return 0;
}

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末新锈,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子眶熬,更是在濱河造成了極大的恐慌妹笆,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,639評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件娜氏,死亡現場離奇詭異拳缠,居然都是意外死亡,警方通過查閱死者的電腦和手機贸弥,發(fā)現死者居然都...
    沈念sama閱讀 90,277評論 3 385
  • 文/潘曉璐 我一進店門窟坐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人茂腥,你說我怎么就攤上這事狸涌。” “怎么了最岗?”我有些...
    開封第一講書人閱讀 157,221評論 0 348
  • 文/不壞的土叔 我叫張陵帕胆,是天一觀的道長。 經常有香客問我般渡,道長懒豹,這世上最難降的妖魔是什么芙盘? 我笑而不...
    開封第一講書人閱讀 56,474評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮脸秽,結果婚禮上儒老,老公的妹妹穿的比我還像新娘。我一直安慰自己记餐,他們只是感情好驮樊,可當我...
    茶點故事閱讀 65,570評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著片酝,像睡著了一般囚衔。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上雕沿,一...
    開封第一講書人閱讀 49,816評論 1 290
  • 那天练湿,我揣著相機與錄音,去河邊找鬼审轮。 笑死肥哎,一個胖子當著我的面吹牛,可吹牛的內容都是我干的疾渣。 我是一名探鬼主播篡诽,決...
    沈念sama閱讀 38,957評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼稳衬!你這毒婦竟也來了霞捡?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,718評論 0 266
  • 序言:老撾萬榮一對情侶失蹤薄疚,失蹤者是張志新(化名)和其女友劉穎碧信,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體街夭,經...
    沈念sama閱讀 44,176評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡砰碴,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,511評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了板丽。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片呈枉。...
    茶點故事閱讀 38,646評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖埃碱,靈堂內的尸體忽然破棺而出猖辫,到底是詐尸還是另有隱情,我是刑警寧澤砚殿,帶...
    沈念sama閱讀 34,322評論 4 330
  • 正文 年R本政府宣布啃憎,位于F島的核電站,受9級特大地震影響似炎,放射性物質發(fā)生泄漏辛萍。R本人自食惡果不足惜悯姊,卻給世界環(huán)境...
    茶點故事閱讀 39,934評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望贩毕。 院中可真熱鬧悯许,春花似錦、人聲如沸辉阶。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽睛藻。三九已至启上,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間店印,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評論 1 266
  • 我被黑心中介騙來泰國打工倒慧, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留按摘,地道東北人。 一個月前我還...
    沈念sama閱讀 46,358評論 2 360
  • 正文 我出身青樓纫谅,卻偏偏與公主長得像炫贤,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子付秕,可洞房花燭夜當晚...
    茶點故事閱讀 43,514評論 2 348

推薦閱讀更多精彩內容