青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆-167  評論-8  文章-0  trackbacks-0

——更新于2011/7/19,目前我已對boost的安裝和使用有了新的認識,因此也會對兩年前寫的這篇文章做大幅修改,網上轉載版本泛濫,請以本文為準。

理論上,本文適用于boost的各個版本,尤其是最新版本1.47.0;適用于各種C++編譯器,如VC6.0(部分庫不支持),VS2003,VS2005,VS2008,VS2010,gcc,C++ Builder等。先總結一下Windows系統。

一、下載

首先從boost官方主頁http://www.boost.org/下載最新版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以上,如果你同時擁有2個以上的IDE(如VC6和VC9共存)而且都要用到boost,那么占用多少硬盤就自己算吧……雖說如今大家的硬盤空間都不成問題,但就像本人一樣崇尚合理利用資源不習慣鋪張浪費提倡節儉的童鞋應該大有人在,所以不需要的配置和不需要的庫就可以不編譯了。綜合以上兩點因素,本人使用的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/install:stage表示只生成庫(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官方主頁http://www.python.org/下載安裝。查看boost包含庫的命令是bjam --show-libraries。
stagedir/prefix:stage時使用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使用幫助文檔,當然最好也不要刪了。其他幾個目錄和文件加起來也就幾十兆,索性都給它們留一條生路吧。
呵呵,一個完整而又完美的boost目錄就此誕生了。

需要注意的是,如果使用VS2008編譯boost(其他版本VC未作測試,可能也有類似問題),那么假如你調用boost的主程序添加了_BIND_TO_CURRENT_VCLIBS_VERSION預定義宏來強制使用最新版本的Windows CRT庫,那么你的boost也需要添加這個預定義宏來進行編譯,否則會導致程序因為各模塊使用的CRT庫版本不統一而出現“在某些機器上運行提示‘由于應用程序配置不正確,應用程序未能啟動’的問題”,關于該問題請參考我的另外一篇文章:【原】解決VS2008編譯的程序在某些機器上運行提示“由于應用程序配置不正確,應用程序未能啟動”的問題。添加該預定義宏的方法是:打開boost安裝根目錄下的boost\config\compiler\visualc.hpp,在最上面增加:

// Added by terry, 2011/4/19, Force the linker to use the latest version of CRT/MFC/ATL dll
#ifndef _BIND_TO_CURRENT_VCLIBS_VERSION
#define _BIND_TO_CURRENT_VCLIBS_VERSION 1
#endif // _BIND_TO_CURRENT_VCLIBS_VERSION

這種方法修改了boost的源碼,并非我所愿, 但是無奈沒有找到更好的方法,如果有人知道希望能夠留言告訴我。

如果圖省事,不想了解這么多,那么有簡單的方法,可以使用命令:
bjam --toolset=msvc-9.0 --build-type=complete
直接指定編譯器以完全模式編譯即可,這樣可以滿足今后的一切使用場合,但同時帶來的后果是:
1、占用3G以上的硬盤空間
2、占用若干小時的編譯時間
3、頭文件和庫文件存放于C:\Boost(本人非常反感)

4、生成的很多文件可以永遠也用不上

四、配置

include目錄:E:\SDK\boost
library目錄:E:\SDK\boost\bin\vc9\lib

添加到IDE相應的路徑下面即可。

五、使用

使用舉例:
#include <boost\thread.hpp>
此時,不用包含庫文件,boost的auto-link機制將會自動幫我們包含對應的靜態lib。也就是說,boost默認是以靜態方式鏈接的,這樣我們的工程屬性最好也設為Multi-threaded (Debug)。如果想使用dll動態方式鏈接,需要預先定義宏:
#define BOOST_ALL_DYN_LINK
同樣,此時boost也會默認幫我們包含對應的lib。如果不想使用boost提供的auto-link機制,或者對它的自動鏈接不太放心的話(其實大可不必擔心),可以預先定義宏:
#define BOOST_ALL_NO_LIB
然后使用以下方法鏈接:
#pragma comment(lib, "boost_thread-vc90-mt-1_47.lib")
#pragma comment(lib, "boost_thread-vc90-mt.lib")
這兩個lib其實是一樣的,實在不明白boost編譯時為什么每個庫都要復制一份,難道是因為后者在升級boost版本后不用改代碼?另外還有一個比較有用的宏:
#define BOOST_LIB_DIAGNOSTIC
它可以讓VC在編譯時的output窗口中輸出程序具體鏈接了哪些boost庫以及鏈接順序。

關于boost的auto-link機制,詳細可以看看boost\config\auto_link.hpp里的代碼,很容易可以讀懂,并且值得我們學習。

六、Linux下編譯與配置的區別:

我的Linux與Windows使用了共享目錄,將Windows下的E:\SDK目錄映射成了Linux下的/mnt/hgfs/sdk目錄。
所以我的boost源文件根目錄就是/mnt/hgfs/sdk/boost,cd進去。
首先需要編譯bjam:
./bootstrap.sh
編譯完成后,會在當前目錄下生成bjam,接下來開始編譯boost:
./bjam stage --toolset=gcc --with-date_time --with-thread --with-filesystem --with-program_options --stagedir="/mnt/hgfs/sdk/boost/bin/gcc" link=static runtime-link=static threading=multi debug release
這些參數的意義與Windows下完全一樣,只不過編譯器改成gcc,其他選項根據自己的需要進行設置。
生成的庫文件就在bin/gcc/lib目錄下,與vc9編譯的一樣。
如果將來不會再升級boost版本,那么可以把中間文件全部刪掉,包括bin.v2目錄和tools/jam/stage目錄。
關于boost庫的使用,為了不用每次寫makefile都把boost的頭文件和庫文件的路徑帶著,而且為了讓跨平臺程序公用一套代碼,
可以將boost的頭文件和庫文件路徑加到Linux的環境變量中。打開/etc/profile,加入以下gcc環境變量:
CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:"/mnt/hgfs/sdk/boost"
export CPLUS_INCLUDE_PATH

LIBRARY_PATH
=$LIBRARY_PATH:"/mnt/hgfs/sdk/boost/bin/gcc/lib"
export LIBRARY_PATH

這樣就可以直接使用boost的頭文件和庫文件了,并且與Windows共用一套代碼,非常方便。

七、可參考的網上流行的幾篇文章:

Windows VC6編譯安裝Boost庫:http://blog.csdn.net/weekly123/archive/2007/11/23/1899188.aspx
boost編譯步驟:http://blog.csdn.net/aheroofeast/archive/2009/03/22/4015458.aspx
boost 1.35.0 Visual Studio 2008編譯指南:http://blog.csdn.net/benjiamen/archive/2008/07/12/2643705.aspx
VS2008下安裝boost:http://www.cnblogs.com/xdotnet/archive/2008/03/22/boost_install_config.html

posted on 2011-10-17 16:25 老馬驛站 閱讀(3450) 評論(0)  編輯 收藏 引用 所屬分類: c++Boost
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            麻豆freexxxx性91精品| 久久女同精品一区二区| 国产精品久久久久久亚洲调教| 老色鬼精品视频在线观看播放| 久久九九热re6这里有精品| 亚洲欧美怡红院| 久久久久久久97| 欧美成人情趣视频| 欧美日韩专区| 国产亚洲精品成人av久久ww| 激情久久久久久久久久久久久久久久| 在线观看一区视频| 亚洲网站在线播放| 久久精品夜色噜噜亚洲a∨ | 亚洲人成人77777线观看| 亚洲精品免费一二三区| 亚洲一二三区在线观看| 久久久久久夜| 亚洲精品美女91| 亚洲专区一区二区三区| 久久精品在线| 欧美日韩在线免费| 激情av一区| 亚洲欧美精品| 欧美黄色大片网站| 亚洲一级在线| 欧美jizz19性欧美| 国产亚洲精品aa午夜观看| 亚洲伦理中文字幕| 久久免费观看视频| 亚洲视频中文字幕| 欧美精品成人| 黄色另类av| 亚洲欧美日韩爽爽影院| 亚洲国产精品成人综合色在线婷婷 | 亚洲精品视频在线观看免费| 亚洲男人天堂2024| 欧美极品一区| 激情丁香综合| 久久另类ts人妖一区二区| 久久免费精品视频| 中文亚洲字幕| 欧美日韩高清在线播放| 在线观看国产日韩| 欧美在线黄色| 亚洲一区日韩在线| 欧美全黄视频| 亚洲乱码国产乱码精品精可以看| 久久久久免费| 性亚洲最疯狂xxxx高清| 国产精品午夜在线| 亚洲免费一在线| 一本色道**综合亚洲精品蜜桃冫| 欧美成人亚洲成人日韩成人| 精品电影在线观看| 久久综合给合| 久久久之久亚州精品露出| 黄色日韩在线| 欧美jizz19性欧美| 久久久之久亚州精品露出| 一区二区在线观看视频| 久久午夜羞羞影院免费观看| 欧美一级久久久久久久大片| 国产精品午夜国产小视频| 欧美一区二区三区播放老司机| 亚洲午夜激情免费视频| 国产目拍亚洲精品99久久精品| 新片速递亚洲合集欧美合集| 亚洲男人影院| 激情视频一区| 欧美激情黄色片| 欧美久久久久免费| 亚洲欧美乱综合| 午夜精品美女自拍福到在线| 国产一区二区三区成人欧美日韩在线观看 | 浪潮色综合久久天堂| 亚洲观看高清完整版在线观看| 久久日韩粉嫩一区二区三区| 久久色在线播放| 日韩亚洲欧美综合| 亚洲网站在线观看| 国内精品久久久久久久影视蜜臀 | 中国成人在线视频| 国产精品一区二区视频| 毛片一区二区三区| 欧美精品成人一区二区在线观看| 亚洲午夜视频在线| 久久国产精品99精品国产| 亚洲国产女人aaa毛片在线| 亚洲日本精品国产第一区| 国产精品日韩精品欧美精品| 久热精品视频| 在线观看亚洲| 久久久久在线| 国产在线拍偷自揄拍精品| 久久久蜜桃一区二区人| 久久婷婷国产综合精品青草 | 欧美一区二区三区四区高清| 怡红院精品视频在线观看极品| 亚洲国产一区在线观看| 国产伦精品一区二区三区视频孕妇| 欧美福利视频网站| 国产日韩精品电影| 亚洲人成人一区二区在线观看| 国产精品一区二区久激情瑜伽| 麻豆精品视频| 国产目拍亚洲精品99久久精品| 亚洲人成网站999久久久综合| 国产午夜精品全部视频在线播放 | 欧美激情一区二区三区| 久久久精品性| 国产精品视频免费一区| 亚洲国产色一区| 黄色成人av在线| 亚洲影音一区| 在线亚洲自拍| 欧美激情在线免费观看| 免费在线观看一区二区| 国产精品欧美日韩久久| 日韩亚洲欧美一区二区三区| 亚洲国产成人精品久久久国产成人一区| 在线一区日本视频| 一区二区三区三区在线| 蜜臀av国产精品久久久久| 久久久亚洲人| 国产一区日韩欧美| 午夜精品一区二区三区电影天堂 | 亚洲国产精品久久久久秋霞蜜臀 | 午夜视频久久久| 欧美日韩国产限制| 亚洲破处大片| 99re热这里只有精品视频 | 亚洲一区三区视频在线观看| 一区二区三区你懂的| 欧美激情第三页| 亚洲激情欧美| 一区二区三区久久| 欧美日韩视频在线一区二区 | 久久嫩草精品久久久久| 国产日韩精品在线观看| 午夜久久资源| 久久免费99精品久久久久久| 国产亚洲va综合人人澡精品| 午夜精品国产精品大乳美女| 欧美一区二区三区精品电影| 黄色精品在线看| 国产精品久久久久久福利一牛影视| 亚洲电影第三页| 亚洲精品欧美极品| 欧美精品在线一区二区三区| 亚洲美女黄网| 午夜久久资源| 国产视频精品va久久久久久| 欧美一区二区三区精品电影| 开元免费观看欧美电视剧网站| 亚洲福利一区| 欧美日韩视频一区二区| 亚洲综合精品自拍| 久久在线观看视频| 亚洲免费成人| 国产精品视频精品视频| 久久精品av麻豆的观看方式 | 99国产精品99久久久久久| 欧美日韩成人在线视频| 亚洲——在线| 欧美大片专区| 亚洲一区二区精品在线观看| 国产日韩欧美一区二区| 米奇777超碰欧美日韩亚洲| 一本一本大道香蕉久在线精品| 欧美一区久久| 亚洲精品美女免费| 国产日本精品| 欧美麻豆久久久久久中文| 午夜日本精品| 日韩午夜中文字幕| 狼狼综合久久久久综合网| 亚洲视频精品在线| 亚洲国产人成综合网站| 国产精品主播| 欧美国产91| 久久福利一区| 亚洲午夜激情在线| 91久久亚洲| 欧美gay视频激情| 欧美专区第一页| 亚洲视频观看| 亚洲精品视频在线观看免费| 国产一区二区中文| 国产精品久久久久一区二区三区| 蜜臀91精品一区二区三区| 亚洲欧美国产视频| 亚洲看片免费| 亚洲第一视频网站| 久久综合网络一区二区| 欧美在线视频一区二区| 亚洲天堂av在线免费| 亚洲精选视频在线| 亚洲黄色免费网站| 亚洲第一在线综合在线|