boost詳解——編譯


本文采用的boost庫版本爲boost_1_72_0。

1. 常用編譯指令

  • link=static|shared:指boost生成的是動態庫還是靜態庫,可以使用link=static,shared同時生成兩種庫。
    • static:靜態庫
    • shared:動態庫
    • 默認值:static
  • runtime-link=static|shared:指boost鏈接系統運行時庫時是靜態還是動態鏈接。
    • static:靜態庫
    • shared:動態庫
    • 默認值:shared
  • –with-:指定哪一個庫需要編譯,如–with-regex則只編譯regex庫,若不指定,則默認編譯所有庫。
  • –without-:指定不編譯哪個庫,如–without-regex,則除了regex庫外,編譯其他所有庫。
  • threading=single|multi:指定是否生成多線程庫
    • single:生成單線程庫
    • multi:生成多線程庫
    • 默認值:multi
  • toolset=:指定編譯庫的工具集,如:toolset=msvc-14.2
  • variant=debug|release:指定生成debug還是release版本的庫
  • install:會同時生成lib和include文件
  • stage:只會生成lib文件
  • –prefix=:與install選項一起用,指定include和lib文件生成目錄
  • –stagedir=:與stage選項一起用,指定lib文件生成目錄
    • 默認值:"./stage"
  • -j:表示用多少線程進行編譯,比如-j8表示使用8線程編譯。
  • address-model=:表示生成32還是64位庫,32表示生成32位,64表示生成64位,但是需要使用的編譯器支持才行。
  • –build-dir=:指定生成中間文件位置。
  • –includedir=:指定生成的include文件位置。
  • –libdir=:指定生成的lib文件位置。

2. 生成庫命名規則

以libboost_regex-vc142-mt-d-x64-1_72.lib爲例:

  • lib:前綴,除了windows之外,每個boost庫名字都以lib開始,在windows上,只有靜態庫使用lib前綴;動態庫不使用。
  • boost_regex:庫名稱,所有boost庫都以boost_開頭。
  • -vc142:toolset標記:標識構建該庫所用的toolset和版本信息。
  • -mt:多線程標記,標識該庫啓用了多線程支持。不支持多線程的庫沒有-mt。
  • -d:ABI標記:表明了影響庫和其他編譯代碼的交互細節。對於每一種特性,向標記中添加一個字母。
    • s 靜態鏈接C++標準庫和編譯器運行時庫
    • g 鏈接時使用標準庫和運行時庫的調試版本
    • y 使用Python的特殊調試構建
    • d 生成庫的調試版本
    • p 使用STLPort標準庫而不是編譯器提供的默認庫
    • n 使用STLPort已被棄用的“native iostreams”
  • -x64:目標平臺標記,x64表示64位平臺,沒有這一項時,表示32位平臺。
  • -1_72:版本標記,完整的boost發佈號,下劃線代替點。
  • .lib:擴展名。

3. windows10+vs2019編譯

3.1 msvc版本對應

  • vs2019——msvc-14.2
  • vs2017——msvc-14.1
  • vs2015——msvc-14.0
  • vs2013——msvc-12.0
  • vs2010——msvc-10.0

3.2 編譯

  1. 從開始菜單打開x64_x86 Cross Tools Command Pro
    在這裏插入圖片描述
  2. 切換到boost源碼目錄。
  3. 執行.\bootstrap.bat vc142。在我的電腦上vc142必須加,不然會出現如下錯誤:
    在這裏插入圖片描述
    在bootstrap.bat中有如下指令:
    在這裏插入圖片描述
  4. 成功後,繼續輸入.\b2,後面可以跟上述編譯指令,控制編譯過程,如下
    .\b2 toolset=msvc-14.2 link=static runtime-link=static,shared --build-dir=build/x64 address-model=64 -j12 install --prefix=build/output
    
  5. 整個編譯過程開始,等較長時間後成功即完成。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章