boost編譯中的細節問題

2022-09-16 11:09:09 字數 3801 閱讀 2394

生成檔案命名規則:boost中有許多庫,有的庫需要編譯、而有的庫不需要編譯,只需包含標頭檔案就可以使用。編譯生成的檔案名字普遍較長,同乙個庫根據編譯鏈結選項不同,又可以生成多個不同名字的檔案。生成的檔案名字是很長,可是這樣帶的資訊才多,也就容易識別出用途。其實生成檔案的名字遵循一定的規則,有著固定的格式。識別這種格式,能幫助我們更高效地使用boost庫。生成檔案名字格式如: 

boost_lib_prefix + boost_lib_name + "-" + boost_lib_toolset + "-" + boost_lib_thread_opt + "-" + boost_lib_rt_opt + "-" + boost_lib_version  

這些定義為:

boost_lib_prefix: 靜態庫為 "lib" (否則無,是用動態鏈結庫)

boost_lib_name: 庫的基本名稱 ( 比方說 boost_regex).

boost_lib_toolset: 編譯工具集名稱 ( 比如:vc6, vc7, bcb5 )

boost_lib_thread_opt: 多執行緒為 "-mt" ,否則為空

boost_lib_rt_opt: 指示使用的執行庫的字尾, 

組合下面的乙個或者更多字元:

s 靜態執行庫,指的是靜態鏈結到執行時庫(不出現表示動態).

g 除錯/診斷 runtime (release if not present).

d 除錯版本 (不出現表示 release 版 ).

p stlport 版本.

注:對 vc 來說,gd 總是一起出現

boost_lib_version: boost 版本, boost 版本 x.y 表示為 x_y形式.

編譯:為了簡化boost庫的編譯,boost庫中帶了乙個用來編譯的工具,名字是bjam.exe或者b2.exe.

1:執行boost下的bootstap.bat指令碼就會自動生上述的兩個編譯工具,並且拷貝到boost目錄下. 也可以進入tools/build目錄下找到類似的指令碼或者專案原始碼來編譯.

2: bjam.exe的引數

feature

allowed values

notes

variant

debug,release

link

shared,static

determines if boost.build creates shared or static libraries

threading

single,multi

cause the produced binaries to be thread-safe. this requires proper support in the source code itself.

address-model

32,64

toolset

(depends on configuration)

the c++ compiler to use. see the section called 「c++ compilers」 for a detailed list.

(vs2008)msvc-8.0(vs2010)msvc-10.0

include

(arbitrary string)

additional include paths for c and c++ compilers.

define

(arbitrary string)

additional macro definitions for c and c++ compilers. the string should be either symbol or symbol=value

cxxflags

(arbitrary string)

custom options to pass to the c++ compiler.

cflags

(arbitrary string)

custom options to pass to the c compiler.

linkflags

(arbitrary string)

custom options to pass to the c++ linker.

runtime-link

shared,static

determines if shared or static version of c and c++ runtimes should be used.

--build-dir=

編譯的臨時檔案會放在builddir裡(這樣比較好管理,編譯完就可以把它刪除了)

--stagedir=

存放編譯後庫檔案的路徑,預設是stage

--build-type=complete

編譯所有版本,不然只會編譯一小部分版本(確切地說是相當於:variant=release, threading=multi;link=shared|static;runtime-link=shared)

variant=debug|release

決定編譯什麼版本(對應檔案中的d 除錯版本 不出現表示 release 版)

link=static|shared

決定使用靜態庫還是動態庫。(對應檔案中的boost_lib_prefix )

threading=single|multi

決定使用單執行緒還是多執行緒庫。(對應檔案中的boost_lib_thread_opt)

runtime-link=static|shared

決定是靜態還是動態鏈結c/c++標準庫。(對應檔案中的boost_lib_thread_opt)

--with-

只編譯指定的庫,如輸入--with-regex就只編譯regex庫了。

--show-libraries

顯示需要編譯的庫名稱

bjam.exe --toolset=msvc-10.0 --with-date_time runtimelink=static link=static stage 

意思是要生靜態庫,該靜態庫靜態鏈結c執行時庫

生成的檔案名字是:libboost_date_time-vc100-mt-sgd-1_48.lib(debug version),libboost_date_time-vc100-mt-s-1_48.lib(release version) 兩個檔案.

bjam.exe --toolset=msvc-10.0 --with-date_time runtimelink=shared link=static stage

意思是要生靜態庫,該靜態庫動態鏈結c執行時庫

生成的檔案名字是:libboost_date_time-vc100-mt-gd-1_48.lib(debug verion),libboost_date_time-vc100-mt-1_48.lib(release version) 兩個檔案.

bjam.exe --toolset=msvc-10.0 --with-date_time runtimelink=shared link=shared stage

意思是要生動態庫,該動態庫動態鏈結c執行時庫

生成的檔案名字是:boost_date_time-vc100-mt-gd-1_48.lib(debug version),boost_date_time-vc100-mt-1_48.lib(release version) 兩個檔案.

生成的dll名字是:boost_date_time-vc100-mt-gd-1_48.dll(debug version),boost_date_time-vc100-mt-1_48.dll(release version)

編譯選項方面還有install等引數.

Boost在linux中編譯

用boost 1 39 0版本作為例子 1 進入boost 1 39 0 tools jam src 2 執行.build.sh 或者在boost 1 39 0 tools jam 下執行.build dist.sh 3 編譯完成後在boost 1 39 0 tools jam src bin.li...

boost的編譯 使用

2.解壓到zip到磁碟中,如我解壓在d盤中,d boost 1 61 0 3.編譯 1.利用vs的命令列引數,進入原始碼解壓的目錄資料夾中 2.修改user config.jam中mcvs的版本號,如vs2010 修改為vc10 3.在命令列工具中執行d boost 1 61 0 bootstrap...

原創 boost中thread庫的編譯

boost中的thread需要編譯成dll才能使用。首先,獲取boost 可以在cmd中敲入 cvs d pserver anonymous boost.cvs.sourceforge.net cvsroot boost login cvs z3 d pserver anonymous boost....