天天看點

linux下編譯boost

原文出處:http://blog.ehomy.net/archives/148

工作平台:Fedora 12

Linux下官方提供了兩個壓縮版本:

boost_1_43_0.tar.bz2

boost_1_43_0.tar.gz

找到其中一個Unix/Linux包的直接下載下傳位址,然後輸入下列指令

sudo wget http://downloads.sourceforge.net/project/boost/boost/1.43.0/boost_1_43_0.tar.gz?use_mirror=cdnetworks-kr-1

解壓

tar -zxvf boost_1.43.0.tar.gz

進入解壓目錄

cd boost_1_43_0

使用下面的指令建立boost自己的編譯工具bjam(目的是保證Boost在任何平台上都能用bjam編譯),類似于GNU Make。

./bootstrap.sh --prefix=/home/usrname/boost_1_43_0/boost_install

boost将被安裝到/boost_install目錄下,不知名prefix将預設安裝到/usr/local/include和/usr/local/lib下。

建議先檢視下幫助文檔,了解些預設選項,指令為

./bjam –help

.bjam指令的格式為:bjam [options] [properties] [targets]

常用選項(Options)和屬性(Properties)的說明,一般帶有–字首的關鍵詞為option,沒有的則為property。

–show-libraries

顯示需要編譯才能使用的庫清單

–build-type=minimal|complete

–build-type=minimal為預設值,此時在Linux下隻編譯生成release版的動态連結C運作庫(C++标準庫)的多線程靜态庫和動态庫。

–build-type=complete,在Unix/linux下要編譯多個變體(debug或release,多線程或單線程,靜态庫或動态庫,靜态連結或動态連結C運作庫/C++标準庫)。不建議全部編譯,費時還費空間,提倡按需編譯。

–layout=versioned|tagged|system

決定需要編譯的庫名及頭檔案的位址目錄名的生成政策。預設Windows下–layout=versioned,Linux下–layout=system。

當同時編譯多個版本時,最好設定–layout=versioned或–layout=tagged,否則編譯多半會失敗,原因是有的版本同時編譯若不指定命名政策,可能在輸出到指定目錄的時候造成命名沖突。

注:–build-type=complete時,不需要設定此屬性。但指定variant=debug,release等屬性時,須確定–layout=versioned或–layout=tagged。

–build-dir=DIR

指定存放編譯過程中生成的中間檔案,目标檔案等其他檔案的目錄,預設在./bin.v2。

–with-

建立和安裝指定的庫

–without-

不對指定的庫進行建立和安裝,預設建立所有的庫

安裝:關鍵詞 install 或 stage

./bjam install

install會安裝頭檔案和庫檔案到相應指定目錄,頭檔案安裝到/usr/local/include下,庫檔案安裝到/usr/local/lib下。具體指定安裝目錄見./bjam –help。

./bjam stage

stage說起來隻能說是收集生成的庫檔案到一個目錄下,通常預設就在./stage下。

注:

install 和 stage 貌似不能同時使用,中間會卡住。

若編譯過程中未指定install或stage,則生成的目标庫檔案隻存在于–build-dir所指的目錄中,預設為./bin.v2。考慮到此,若無需将頭檔案和庫檔案安裝,則推薦使用stage關鍵字。

下面是屬性:

toolset=toolset

指定編譯器,預設自動檢測,安裝了多個編譯器的時候可以使用此屬性。

variant=debug|release

指定編譯debug或release版本。

link=static|shared

指定建立靜态庫或動态庫

runtime-link=static|shared

指定建立的庫是靜态連結還是動态連結到C運作庫(或C++标準庫),這個選項需依據–link的類型,不同的編譯器允許的連結政策不一樣,比如在GCC下,在生成動态庫(–link=shared)時,就不允許進行靜态連結到C運作庫(或C++标準庫)。

threading=single|multi

指定建立多線程或單線程的版本庫。

屬性可同時設定,如下兩種方式,為了避免名字沖突,建議采取propery=value的格式:

./bjam variant=debug,release stage

./bjam variant=debug variant=release

這兩種方式都可以。

最後執行的建立指令:

./bjam --with-filesystem --layout=tagged variant=release link=static threading=single stage

繼續閱讀