Boost在Linux 64 下的編譯

2022-03-03 23:42:47 字數 1780 閱讀 1080

wget

2. 解壓

3. 執行如下指令碼

function

make_boost()

function

make_issue() ')

echo

"using gcc : $version : $gcc_path ;

" > tools/build/src/user-config.jam

}make_issue

make_boost

第一步是為了啟用4.9的編譯器。

make的引數解釋如下

下面對上面的bjam的各個引數進行解釋說明:

1. stage/install:

stage表示只生成庫(dll和lib),install表示附帶安裝功能,會生成包含標頭檔案的include目錄。推薦使用stage,因為install生成的這個include目錄實際就是boost安裝包解壓縮後的boost目錄(h:\boost\boost_1_55_0\boost,只比include目錄多幾個非hpp檔案,都很小),所以可以直接使用,而且不同的ide都可以使用同一套標頭檔案,這樣既節省編譯時間,也節省硬碟空間

2. toolset:

表示編譯器工具,預設自動檢測,安裝了多個編譯器的時候可以使用此屬性。可選的如borland、gcc、msvc(vc6)、msvc-12.0(vs2013)、msvc-14.0(vs2015)等,我安裝的是vs2008,所以是msvc-9.0(如果你是vs2005,可以使用msvc-8.0 vs2010是msvc-10.0)

3. stagedir/prefix:

stage時使用stagedir,install時使用prefix,表示編譯生成檔案的路徑。推薦給不同的ide指定不同的目錄,例如這裡是vs2008對應的是 h:\boost\boost_1_55_0\vc90

如果使用了install引數,那麼還將生成頭檔案目錄,vc90 對應的就是 h:\boost\boost_1_55_\boost\bin\vc90\include\boost_1_55_0\boost

4. architecture

表示架構,也就是你的cpu架構,所以是x86

5. address-model

位址長度,32表示編譯32位的庫檔案,64表示編譯64位的庫檔案

6. link

生成動態鏈結庫還是靜態鏈結庫。生成動態鏈結庫需使用shared方式,生成靜態鏈結庫需使用static方式。一般boost庫可能都是以static方式編譯,因為最終發布程式帶著boost的dll感覺會比較累贅

7. runtime-link

動態還是靜態鏈結c/c++執行時庫。同樣有shared和static兩種方式,這樣runtime-link和link一共可以產生4種組合方式,各人可以根據自己的需要選擇編譯

gcc下,在生成動態庫(–link=shared)時,就不允許進行靜態鏈結到c執行庫(或c++標準庫)

8. threading

單執行緒還是多執行緒編譯。一般都寫多執行緒程式,當然要指定multi方式了;如果需要編寫單執行緒程式,那麼還需要編譯單執行緒庫,可以使用single方式

9. debug/release:

編譯debug/release版本。一般都是程式的debug版本對應庫的debug版本,所以兩個都編譯

10. without/with:

選擇不編譯/編譯哪些庫。這裡我們指定要編譯哪些庫,就使用了witth,注意寫法:--with-thread --with-date_time,同樣,如果不想編譯哪些庫,可以類似寫法--without-thread

參考資料

關於在Linux64位下安裝xampp

網上關於這個主題的內容比較少,所以就寫一下按裝後的心得。之前一直在windows下用xampp,想在linux下也體驗一把,可是自己的linux裝的是64位的在xampp的官網上沒有linux下64位的版本。以下是安裝步驟 二 在64位安裝32位支援包 unbuntu命令 sudo apt get ...

linux 64位下的 mongodb 安裝

wget tar zxvfmongodb linux x86 64 2.0.4.tgz mv mongodb linux x86 64 2.0.4.tgz mongodb2.0.4 為了方便,把它從命名的更加簡潔些 建立mongodb存放的資料檔案 日子檔案 mongodb db mongodb l...

Boost在Linux下64位靜態庫的問題

boost作為 準 標準庫時,用動態庫進行鏈結總是有點怪怪的,你見過用個string的時候還要鏈結個動態庫嗎。於是編譯了靜態庫進行測試,發現在linux用g 進行編譯的boost靜態庫被動態庫引用的時候會報錯 usr bin ld relocation r x86 64 32 against rod...