首頁  >  文章  >  運維  >  windows下關於boost 64位元和32位元函式庫的編譯詳細介紹

windows下關於boost 64位元和32位元函式庫的編譯詳細介紹

黄舟
黄舟原創
2017-06-07 09:31:355548瀏覽

常用編譯指令:

cd E:\OpenSource\boost_1_63_0\boost_1_63_0

編譯32位元函式庫:

#x86環境下編譯得先從開始功能表啟動Visual Studio的Visual Studio 2008 Command Prompt進入命令提示符  

執行bootstrap.bat產生x86版的bjam.exe  

bjam toolset=msvc-9.0 threading=multi link=static runtime-link=static --with-regex

編譯64位元函式庫:

x64環境下編譯得先從開始功能表啟動Visual Studio的Visual Studio 2008 x64 Win64 Command Prompt進入命令提示字元     

執行bootstrap.bat產生x64版的bjam.exe

bjam toolset=msvc-9.0 threading=multi link=static runtime-link=static --with-regex address-model=64

其中,--prefix設定boost安裝目錄;

stage表示只產生庫檔案(dll與lib檔案);

toolset指定編譯器, vs2010是msvc-10.0,vs2005/vs2008分別是msvc-8.0與msvc-9.0;

variant決定編譯什麼版本debug、release;

link決定使用靜態函式庫或動態函式庫,shared是動態函式庫,static是靜態函式庫;

address-model決定位址長度,即32或64位元程式;

threading決定使用單一執行緒(single)或多執行緒(multi)庫;

runtime-link決定是靜態(static)或動態(shared)連結C/C++標準函式庫;

-s ICU_PATH設定icu4c的路徑;

會產生包含頭檔的include目錄。

理論上,本文適用於boost的各個版本,尤其是最新版本1.48.0;適用於各種C++編譯器,如VC6.0(部分庫不支援),VS2003,VS2005,VS2008, VS2010,V2012,gcc,arm-linux-gcc,C++ Builder等。

先總結Windows系統。

一、下載

先從boost官方首頁最新版boost安裝包,或使用Subversion取得最新版本,網址為:http://svn.boost.org/svn/boost/ trunk。本人現在一般都用svn,這樣可以很方便的進行update和build,而不是每次都下載新的安裝包並rebuild。

二、安裝

如果是使用下載的安裝包,那麼請將boost安裝包解壓縮至本機目錄,如:E:\SDK\boost;如果是用svn的,也可以將boost的程式碼checkout到這個目錄。因為boost一部分類別是需要編譯成函式庫才能使用的,所以我們還需要準備好boost專用的編譯輔助工具bjam。在命令提示字元(cmd.exe)中執行根目錄下的bootstrap.bat,編譯後的bjam.exe會自動拷貝到該目錄下(bjam必須與boost-build.jam在同級目錄)。

三、編譯

接下來就是最重要的編譯步驟了。需要開啟命令提示字元(cmd.exe)視窗並執行bjam,可以使用--help參數來查看命令幫助。這裡詳細講解一下bjam的命令列參數,因為它非常重要。首先,它涉及程式設計環境的搭建,你需要根據自己今後具體的使用環境來選擇合適的命令列參數;其次,它影響到你的硬碟空間,完全編譯的話據說在3G以上。

使用的bjam指令如下:

bjam stage --toolset=msvc-9.0 --without-graph
 --without-graph_parallel --without-math --without-mpi --without-python --without-serialization --without-wave --stagedir="E:\SDK\boost\bin\vc9" 
link=static runtime-link=shared runtime-link=static threading=multi debug release

下面詳細解釋一下每個參數的意義:

stage/installstage表示只產生函式庫(dll和lib),install也會產生包含頭檔的include目錄。本人推薦使用stage,因為install產生的這個include目錄實際上就是boost安裝包解壓縮後的boost目錄(E:\SDK\boost\boost,只比include目錄多幾個非hpp文件,都很小),所以可以直接使用,而且不同的IDE都可以使用同一套頭文件,這樣既節省編譯時間,也節省硬碟空間。

toolset指定編譯器,可選的如borland、gcc、msvc(VC6)、msvc-9.0(VS2008)等。

without/with選擇不編譯/編譯哪些函式庫。因為python、mpi等函式庫我都用不著,所以排除之。還有wave、graph、math、regex、test、program_options、serialization、signals這幾個函式庫編出的靜態lib都非常大,所以不需要的也可以without掉。這可以根據各人需要進行選擇,預設是全部編譯。但要注意,如果選擇編譯python的話,是需要python語言支援的,應該到python官方首頁下載安裝。查看boost包含庫的指令是bjam --show-libraries。

stagedir/prefixstage時使用stagedir,在install時使用prefix,表示編譯產生檔案的路徑。推薦給不同的IDE指定不同的目錄,如VS2008對應的是E:\SDK\boost\bin\vc9,VC6對應的是E:\SDK\boost\bin\vc6,否則都產生到一個目錄下面,很難管理。如果使用了install參數,那麼也會產生頭檔目錄,vc9對應的就是E:\SDK\boost\bin\vc9\include\boost-1_46\boost,vc6類似(光這路徑都這樣累贅,還是使用stage好)。

build-dir编译生成的中间文件的路径。这个本人这里没用到,默认就在根目录(E:\SDK\boost)下,目录名为bin.v2,等编译完成后可将这个目录全部删除(没用了),所以不需要去设置。

link生成动态链接库/静态链接库。生成动态链接库需使用shared方式,生成静态链接库需使用static方式。一般boost库可能都是以static方式编译,因为最终发布程序带着boost的dll感觉会比较累赘。

runtime-link动态/静态链接C/C++运行时库。同样有shared和static两种方式,这样runtime-link和link一共可以产生4种组合方式,各人可以根据自己的需要选择编译。一般link只选static的话,只需要编译2种组合即可,即link=static runtime-link=shared和link=static runtime-link=static,本人一般就编这两种组合。

threading单/多线程编译。一般都写多线程程序,当然要指定multi方式了;如果需要编写单线程程序,那么还需要编译单线程库,可以使用single方式。

debug/release编译debug/release版本。一般都是程序的debug版本对应库的debug版本,所以两个都编译。

本人按以上方式分别编译了静态链接和动态链接两个版本后,整个E:\SDK\boost目录有1.28G。如果不打算将来再升级boost版本,那么可以将编译生成的中间文件bin.v2目录删除,这样整个目录(包括安装包解压缩文件和编译生成的库文件)会减小至不到800MB,如果runtime-link只选了一种方式,那么整个目录只有600MB。事实上编译完成后除了boost和bin目录之外其他目录和文件已经可以删除了,这样还可以腾出350MB的空间来。不过我又研究了一下,其实libs这个目录也很有用,它提供了所有Boost类的使用范例,平时可以作为参考;另外doc目录是一个完整的boost使用帮助文档,当然最好也不要删了。其他几个目录和文件加起来也就几十兆,索性都给它们留一条生路吧。

 64 位编译

和32位环境不同,x64环境下编译得先从开始菜单启动Visual Studio的Visual Studio 2008 x64 Win64 Command Prompt进入命令提示符,而不是随便打开任意一个命令行窗口就行。然后转到boost根文件夹,运行bootstrap.bat生成x64版的bjam.exe。然后运行命令: 

bjam --build-type=complete toolset=msvc-9.0 threading=multi link=shared address-model=64

即可生成DLL版平台库,如果要编译静态库版就把shared改为static。

  • 只生成一个库的话加上例如--with-python得编译选项,避免生成东西太多、时间太长。

  • 要有address-model=64属性,如果没有这个属性的话,会默认生成32位的平台库,加入这个选项才能生成64位的DLL。

  • 如果要生成Boost.Python库,需要先下载安装x64版的Python安装包,我用的版本是3.2.3。在使用这个库编写Python扩展DLL时,默认是使用动态库版的Boost.Python,要使用静态版的必须在C++项目中定义BOOST_PYTHON_STATIC_LIB宏,这样就不用在使用或发布扩展时带着boost_python-vc90-mt-1_50.dll一起了,当然扩展DLL的尺寸会大些,如果做实验没必要这样,编译又慢生成的文件也大。

以上是windows下關於boost 64位元和32位元函式庫的編譯詳細介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn