Boost在Linux和windows下的编译 32位 64位
一 簡言
1. Boost庫是一個可移植、提供源代碼的C++庫,作為標準庫的后備,是C++標準化進程的開發引擎之一
2. Boost官網地址:http://www.boost.org/
3. 本博客示例所用的版本為boost1.55,版本下載地址為:http://www.boost.org/users/history/version_1_55_0.html
二 ?Windows下的編譯(環境是win7 VS2008)
1. 從上面的boost1.55下載地址下載,windows環境下請下載zip格式的文件,得到壓縮包boost_1_55_0.zip
2. 解壓得到文件目錄boost_1_55_0,筆者這里解壓后的boost根目錄為H:\boost\boost_1_55_0
3.從“開始菜單”中打開Microsoft Visual Studio 2008的命令行,如下圖所示
? ? ? ??
4. 進入到剛才我們解壓的boost跟目錄,即H:\boost\boost_1_55_0,方法是:首先輸入“H:”,回車,再輸入“cd boost\boost_1_55_0”,回車,再輸入“bootstrap.bat”,回車,稍等幾秒鐘即可產生編譯工具bjam.exe和b2.exe,如下圖所示
? ? ??
5.?bjam是專門為boost庫設計的編譯工具,b2.exe 、bjam.exe 這兩個exe作用是一樣的,bjam.exe 是老版本,b2是bjam的升級版本
6. 接著輸入?bjam stage --toolset=msvc-9.0 --stagedir="H:\boost\boost_1_55_0\vc90" architecture=x86 address-model=32 link=static runtime-link=shared threading=multi debug release --with-system --with-thread --with-date_time ?,回車,如下圖所示(注意:這里僅編譯了指定的庫:system, thread, date_time,若想編譯全部庫,請使用--build-type=complete)
? ? ??
7. 會發現在 H:\boost\boost_1_55_0\vc90\lib目錄下已經產生了編譯好的庫文件,如下圖所示
? ? ??
?
三:Linux下的編譯(環境是centos6.8 gcc 4.4.7)
1. 運行命令:yum install gcc gcc-c++ bzip2 bzip2-devel bzip2-libs Python-devel -y ?預先安裝這些庫,因為下面編譯boost時會需要,若已安裝,安裝時會自動跳過,無需擔心
?
2. 定位到/home目錄,運行命令:wget?https://sourceforge.net/projects/boost/files/boost/1.55.0/boost_1_55_0.tar.gz/download ?從上面的boost1.55下載地址下載壓縮包
Linux環境下請下載tar后綴的文件,得到壓縮包boost_1_55_0.tar.gz,筆者這里是下載后的路徑為:/home/boost_1_55_0.tar.gz
3. 運行命令:tar -zxvf?boost_1_55_0.tar.gz ? ?解壓到當前目錄
4. 運行命令:cd?boost_1_55_0 ? 進入剛才的解壓出來的目錄
5. 運行命令:./bootstrap.sh ? 產生后面編譯所必需的bjam
6.?bjam是專門為boost庫設計的編譯工具,b2 、bjam 這兩個可執行程序的作用是一樣的,bjam 是老版本,b2是bjam的升級版本
7. 運行命令:./b2 --show-libraries ?可以顯示所有需要編譯的庫的名字
8. 運行命令:./b2 stage --toolset=gcc --stagedir="\home\boost_1_55_0\gcc" architecture=x86 address-model=64 link=shared runtime-link=shared threading=multi --with-system --with-thread --with-date_time
9. 稍等十幾分鐘,即可在目錄/home/boost_1_55_0/gcc下看到編譯出來的庫,如下圖所示(注意:上面只編譯了指定的三個庫,system,thread, data_time,若想編譯所有庫,去掉后面的--with-選項即可)
?
下面對上面的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
?
總結
以上是生活随笔為你收集整理的Boost在Linux和windows下的编译 32位 64位的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux centos 编译Lua5.
- 下一篇: win7 VS2013 新建工程 编译l