關鍵字:boost 編譯 安裝
boost編譯。沒啥新東西,老生常談。
先給出英文的編譯幫助,有什么不明白的或者我沒說清楚的請查閱并確認。
www.boost.org/more/getting_started.html
或者你的boost的安裝路徑下的more/getting_started.html
這里以1.33.1為例。
1.下載boost包,并解壓到某個文件夾下。這里用為方面起見$boost_dir代替,在說明路徑的地方如果出現了$boost_dir請用實際的boost的解壓路徑替代。
注:如果你下載了boost的一些增補包,這些包一般是在boost從上一個大版本到新大版本之前被收錄的一些新的庫或者是新的編譯工具,例如新的bjam。請不要以為是重名而把同名文件夾覆蓋了。看準合適位置解壓就是了。
2.打開命令行工具。以下的主要工作都將在命令行中進行。
3.首先是編譯jam工具。
?3.1 使用命令行
??SET PATH=%PATH%;$boost_dir\tools\build\jam_src\;
?設置環境變量。這一步也可以在“我的電腦點右鍵->屬性->高級->環境變量->user variable或system variable中"設置,而且是永久性的。使用set設置的環境變量只對當前命令行有效。
?3.2 ?運行build.bat。在命令行中查看結果。如果結果顯示“update 1 targets successful"這樣的信息,則表明編譯成功。此時“$boost_dir\tools\build\jam_src\”文件夾可發現一個新的文件夾btn.x86,在里面可以發現bjam.exe。(不知道會不會有btn.x64文件夾。。。我是X86的機器,不太清楚)
??將這個文件夾也添加到環境變量中。
??SET PATH=%PATH%;$boost_dir\tools\build\jam_src\btn.x86;
?3.3?如果沒能成功編譯bjam,則可能是編譯器的設置問題。對于Visual C++(2005Express有點特殊)編譯器,找到common7\tools\vcvars32.bat,把它拖到命令行窗口中,運行一下,然后再執行build.bat。對于2005 Express,這個編譯器攜帶的是精簡的編譯環境,你可以同樣找到vcvars.txt,然后更名為vcvars.bat,按照剛才的方式執行一邊即可。
4.bjam編譯好后,就可以利用它編譯庫文件了。將命令行的工作目錄放置到$boost_dir下,然后執行一下bjam --help,看能否正確的執行bjam.exe。如果提示找不到文件,將bjam所在的路徑添加到環境變量path中,實在不行就把bjam復制到$boost_dir下。
5.如果試圖使用boost.python庫,則需要添加安裝python,并設置對應的環境變量,這里的root對應的是你的python的安裝路徑,ver對應的是你的python版本。
SET PYTHON_ROOT=X:\Python2.3.4
SET PYTHON_VERSION=2.3
6.如果使用了boost.iostreams的compress或者unicode功能,請參閱對應的提示。通常你需要zlib和icu這兩個庫。
7.編譯選項:
選項參見$boost_dir\more\getting_started.html,這里有詳細的說明,以下僅列舉一個很具代表性的選項。
bjam -sBOOST_ROOT=. -sTOOLS=vc-7_1 --with-thread "-sBUILD=debug release <runtime-link>static/dynamic"
上面的命令行設置環境變量BOOST_ROOT為當前路徑,使用Visual C++ 7.1編譯器,僅編譯thread庫(因為完整的編譯耗時很長,所以建議使用--with-<library_name>來編譯指定庫。類似的還有--without-<library_name>選項)。
編譯好的庫都在$boost_dir\bin下。你可以進去搜索所有的lib/dll文件然后剪切出來放到一個文件夾中,再把其他的中間文件刪掉就好了。
類似的你還可以編譯其他的類庫,具體的庫可能需要依賴一些其他的庫,你可以參見庫的編譯說明。另外生成的庫運行時鏈接情況也是不一樣的,例如有的庫不能支持靜態鏈接。這一點請詳細閱讀幫助文件。
8.使用:
這里可能不太好舉例。先將$boost_dir加入到編譯器的include目錄列表中。然后我編譯好了thread庫,并且將所有的相關文件都統一放置到了$boost_dir\bin\thread\目錄下,我便可以在我的工程中將該目錄添加到鏈接文件的路徑中。然后依據情況選擇是否手工添加庫文件。在幫助的“Automatic Linking on Windows”一節,文檔說,很多需要編譯的庫,boost都使用了#pragma指示字指明了庫名稱,也就是說只需要加上庫所在的路徑就好了。
最后是關于運行時庫的問題。最好把你的工程選用的CRT與編譯boost庫時使用的CRT一致起來。這一點可以根據boost文件的名稱判斷。否則的話可能會出現內存的使用錯誤(尤其是分配和釋放不在一個堆的時候更是如此)。
最后是一篇中文文檔。這篇也不錯。如果不清楚,E文也不是太好的可以參看它
http://blog.csdn.net/billdavid/archive/2005/03/07/313347.aspx