boost的安裝問題

 

 這篇文章,很重要,但是原文網址找不到了,就保留了最後面的版權。

 

概要

這個概要將幫助你開始利用Boost庫。通過如下的步驟來取得、生成、安裝Boost。下面是生成安裝Boost的概要

  1. 下載 Boost.
  2. 安裝 Boost.Jam.
  3. 配置你的編譯工具.
  4. 去Boost發行版文件夾.
  5. 生成和安裝.

下載

1 Boost庫通過SourceForge文件發佈系統來進行發佈。可以 從SourceForge下載得到Boost發行版. 並把它解壓縮到一個合適的地方。

你從網站上可以得到Boost發行版的所有的庫和其他文檔。他們被打包爲ZIP, TAR.GZ, and TAR.BZ2 文件格式。 (在這裏)既可以得到老的版本。

也可以從CVS 庫同步到當前Boost最新的快照版本。

.zip file

.zip 格式被自由和商業的壓縮/存檔工具廣泛的支持。如果你還沒有一個.zip文件解壓器。那麼可以從 Info-ZIP 網站下載一個,這個網站提供了不少操作系統上面的版本。

文本文件的行結束符如果打包爲.zip 作爲被每一個庫開發者支持的(東西)(Text file line endings in the .zip file are as supplied by each library developer),在windows下面工作很好,在linux/unix下面就沒那麼漂亮了。.tar.gz和.tar.bz2支持對於linux/unix更友好的文件換行符

.tar.gz 和 .tar.bz2 文件

.tar.gz 格式在Unix/Linux下面被廣泛的支持。一些Windows的壓縮/歸檔工具也可以順利讀取。因爲gzip文檔把所有文件看成一個文檔壓縮,所以要比分別壓縮文件的zip壓縮出來的文檔要小一些。

.tar.bz2 格式在Unix/Linux下面被廣泛的支持。並且其還被整合到一些tar工具中,這個格式採用了和.tar.gz不同的壓縮方法。所以其可以創建更加小的文件。

爲了在Unix/Linux環境下更容易的使用,Text文件換行符,在.tar.gz和.tar.ba2文件中已經被轉換成一個新行。

Boost CVS

所有的Boost文檔,包括實體發行樹(代碼),包括網站HTML文檔都被CVS服務器管理。(Boost網站)提供了命令行,GUI,瀏覽器訪問方式。

通過命令行或者CVS客戶端訪問CVS

(Boost)庫可以從對那些安裝了CVS客戶端的,可以去訪問公共Boost CVS 倉庫。Unix/Linux環境的用戶可以使用命令行來訪問,Windows,Mac或者其他環境的用戶則可以通過GUI來訪問。

請參考改良過的SourceForgeCVS使用指南第F節。它包含了各種各樣的客戶端的訪問鏈接。

常規的訪問方法如下:

cvs -d:pserver:[email protected]:/cvsroot/boost login
[Hit <return> when it asks for a password]
cvs -z3 -d:pserver:[email protected]:/cvsroot/boost checkout boost
cvs -d:pserver:[email protected]:/cvsroot/boost logout

請閱讀你的CVS手冊來獲得更多的信息。

這種訪問是隻讀的;如果你是一個庫的作者並且打算向CVS提交代碼,請聯繫 相關人員

通過網頁瀏覽器訪問Boost CVS

你可以近代的瀏覽器來訪問Boost CVS 文件   你可以通過顏色的不同看到一個文件被更新了多少次 注意:這個接口只是用來顯示個別文件的修改歷史 從CVS裏的BoostBook產生文檔

一些Boost文檔產生自CVS倉庫裏面的BoostBook XML 代碼,這些代碼並沒有被轉換成可以閱讀的HTML參考文檔。可以訪問 Nightly Generated 文檔來查看通過"nightly build"生成的HTML文檔。

準備

Boost推薦使用Boost.Build(Boost編譯生成系統)來生成安裝Boost庫。 本文檔剩下的部分解釋它的用法。但是用不用這個系統就看你的需求了。注意,一些雖然庫同樣也包含了非Boost.Build的make文件或者工程文件。 但是Boost.Build卻包含了構建Boost所需要的全部文件。

2 這個生成系統使用Boost.Jam,一個 Perforce Jam 擴展版本--這是make 一種輕量級的替代品。 推薦你去SourceForge 下載一個Boost.jam的可執行文件 如果你所使用的環境沒有預先編譯好的可執行的Boost.Jam或者如果你在使用一個還沒有發佈的Boost源碼。那麼你就需要 從代碼手動生成bjam , 而bjam的代碼也包含在Boost的源碼樹裏面。編譯好Boost.Jam以後,把bjam的執行文件放在你的Boost根目錄下面就可以了。

配置編譯工具

在使用Boost.Build之前,你需要指定編譯工具,有兩種方法可以做到使得Build.System正常的工作。

  1. 用戶可以用常規的方法爲它他算使用的每一套編譯工具集設置一套變量。 例如,設置Microsoft VC++, 就可以在PATH變量中添加...VC98/Bin 或者 .../VC7/Bin的路徑, 還需要編譯之前調用一次VCVAR32.BAT或者VSVAR32.BAT(這樣它就可以用VC來編譯Boost了)。 而使用CodeWarrior , 就應該調用cwenv.bat,而且其他的Metrowerks工具/命令行工具也應該在path變量中。 大多數的Unix系統都會預先配置好這些變量而不需要用戶來干預。

  2. 某一個用戶不打算讓他的變量被弄亂設置或者他也不是很瞭解他的編譯工具的配置。作爲一種替代,他(她)可以設置一個變量指向她的編譯工具的安裝目錄, 這個變量可以事先在命令行環境變量裏面聲明,或者在調用bjam時聲明, 知道定義好這個變量, 那些被用到的變量會被自動的找到並且設置好。這個變量就是-s,例如:

    bjam "-sGCC_ROOT_DIRECTORY=/usr/local/gcc-3.3.2"

    一些變量,例如工具集變量TOOLS ,可以接收多個用空格分開的值。 其他的,比如上述的path,可以包含空格。對於一些環境,你還可以引用其他適當的設置方法(譯者注:這可能是說可以使用shell變量一類的東西)。

被支持的編譯工具

3 下面是Boost.Build支持的編譯工具,爲了配置 那些工具,可以點擊最左邊的名字的鏈接。

編譯工具名 說明
borland Borland C++
como Comeau C++ compiler front-end for non-Windows platforms
como-win32 Comeau C++ compiler front-end for Windows, using Microsoft Visual C++as a back-end.
cw Metrowerks CodeWarrior Pro 6.x, 7.x, 8.x, and 9.x command-line tools
darwin Apple Darwin OS hosted GNU GCC
dmc Digital Mars C++.
dmc-stlport Digital Mars C++, using the STLport standard library implementation
edg Edison Design Group compiler front-end (evaluation version)
gcc GNU GCC on Unix and Cygwin.
gcc-stlport GNU GCC on Unix and Cygwin, using the STLport standard library implementation
gcc-nocygwin GNU GCC Cygwin command line compiler tools running in "no-cygwin" mode (produces commercially redistributable objects)
intel-linux Intel C++ for Linux
intel-win32 Intel C++ for Windows using the Dinkumware standard library in the Intel-required Microsoft Visual C++ 6 or 7 installation
kcc KAI C++
kylix Borland C++ for Linux (Kylix).
mingw GNU GCC and associated tools in MinGW configuration (produces commercially redistributable objects)
mingw-stlport GNU GCC and associated tools in MinGW configuration (produces commercially redistributable objects), using the STLport standard library implementation
mipspro SGI MIPSpro C and C++
msvc Microsoft Visual C++ version 6 command-line tools. NOTE; For version 7.x (the .NET series) use the vc7, vc-7_1, or vc-8_0 toolsets below.
msvc-stlport Microsoft Visual C++ version 6 command-line tools, using the STLport standard library implementation. NOTE; For version 7.x (the .NET series) use the vc7-stlport or vc-7_1-stlport toolsets below.
sunpro SunPRO C++ compiler
tru64cxx Compaq C++ for Tru64 UNIX (versions prior to 6.5)
tru64cxx65 Compaq C++ Version 6.5 for Tru64 UNIX
vacpp IBM Visual Age C++ command-line tools
vc7 Microsoft Visual C++ command-line tools from Visual Studio .NET.
vc7-stlport Microsoft Visual C++ command-line tools from Visual Studio .NET + STLPort.
vc-7_1 Microsoft Visual C++ command-line tools from Visual Studio .NET 2003.
vc-7_1-stlport Microsoft Visual C++ command-line tools from Visual Studio .NET 2003 + STLPort.
vc-8_0 Microsoft Visual C++ command-line tools from Visual Studio .NET 2005.

Build and Install

共同的編譯安裝處理流程都是被top-level build文件(Jamfile)驅動的。

4

首先你需要進入你的Boost發行版的目錄,例如:

chdir boost-1.31.0

默認情況下,Boost將試圖編譯全部的庫並且把庫和頭文件安裝到默認的路徑中去。 在Unix系統中,默認的路徑是"/usr/local"。 而Windows系統則是 "C:/Boost"。Boost庫將會被安裝到這些文件夾的“lib”子文件夾下面。 而頭文件則會被安裝到"<include/boost-1_33>"子文件夾裏面。所有的這些設定都是來源於你所用的系統。

5 調用build system,指定 編譯工具來安裝,比如說,GNU/GCC。

bjam "-sTOOLS=gcc" install

如果你只打算生成庫並且把編譯好的庫收集到一個文件夾裏面而不打算安裝它們。

bjam "-sTOOLS=gcc" stage

這個編譯和安裝系統可以通過一個GNU風格的參數集合來控制。這些命令參數可以允許你指定安裝目錄,不安裝某一個庫, 下面是這些命令和參數的一些介紹。你還可以用bjam --help"來查看這些參數。

bjam [options...] [install|stage]

動作(命令)  
none 只生成Boost庫,這個命令是讓你做install命令的第一個步驟用的。 這個命令通常不會拷貝生成好的庫到安裝目錄。
install 編譯安裝Boost的庫和頭文件。
stage 生成Boost庫並且把生成物拷貝到一個文件夾中。
參數  
--help 顯示命令的一些參數和語法的一些概要。
-sTOOLS=<toolsets> 指定編譯工具集列表,通常只需要一個編譯工具。
--prefix=PREFIX 安裝的目標文件夾。
Win32默認: C:/Boost
Unix、Linux等默認: /usr/local
--exec-prefix=EPREFIX Install architecture dependent files here.(這個是做啥的不知道)
默認; PREFIX
--libdir=DIR 安裝庫的目標文件夾。
默認: EPREFIX/lib
--includedir=DIR 安裝代碼頭文件的文件夾,Boost頭文件夾將會安裝在定義的文件夾的 "boost-<version>" 裏面。
默認: PREFIX/include
--builddir=DIR 指定使用的生成文件夾,這將編譯代碼時產生的中間文件放到一個指定的路徑下而不用和代碼混在一起。 推薦!
--stagedir=DIR 如果只是使用state生成庫文件,這個變量指定這些庫將會被放在哪裏。
默認; ./stage
--without-<library> 指定不編譯,安裝的庫。
--with-<library> 指定編譯、生成的庫,這個變量改變默認的生成所有的庫的設定,而 生成指定的庫。
--with-python-root[=PYTHON_ROOT] 用指定的Python開發包生成Boost.Python庫,PYTHON_ROOT代表Python的開發包的目錄。 Boost.Python只在提供的PYTHON_ROOT有效的情況下才被編譯。
Win32環境默認: C:/Python24
Unix,Linux , Cygwin環境默認:/usr
--with-python-version[=2.4] 生成Boost.Python庫的Python的版本。
默認: 2.4.
--with-pydebug 用Python的調試運行環境編譯Boost.Python。 這是用Python的調試版來生成一個庫的附加集合。而同時,常規的Boost.Python也會被生成。
-sHAVE_ICU=1 Boost.Regex的Unicode版本依賴於ICU 庫。 而這個庫一定要在同一個編譯器下面生成並且安裝到編譯器所能找到的include和lib文件夾下面。 請參考 the Boost.Regex 安裝文檔. 獲得更多的信息。
-sICU_PATH=path Boost.Regex的Unicode版本依賴於ICU 庫。而這個庫一定要在你所使用的同一個編譯器下面生成,如果你在安裝ICU的時候使用的prefix爲 --prefix=/usr/local/icu/3.3,那麼在這裏,你就可以設置 -sICU_PATH=/usr/local/icu/3.3. 請參考 Boost.Regex 安裝文檔. 獲得更多的信息。
-sNO_COMPRESSION=1 生成Boost.Iostreams庫的時候不使用外部的zlib和libbz2來生成壓縮庫。 如果你用Windows,那麼這個選項默認爲1(就是不生成壓縮庫);如果你用unix,則壓縮庫很有可能默認就被生成了,所以如果這個參數不起作用, 你可以參考Boost.Iostreams安裝文檔

這裏有一些 Boost.BuildBoost.Jam 支持的附加參數。其中最重要的可能就是"-sBUILD="。這個參數允許你覆蓋默認的編譯目標。參數值"<features/variants>" 是一個用空格分隔的列表。features以一個tag和一個或多個值的方式出現;variant則是features集合做附加說明的一個簡單的符號名字。例如默認的編譯目標是 "debug release <runtime-link>static/dynamic <threading>single/multi" 其中"debug" 和 "release"就是variant,那麼每一個features都會帶有這兩個variant.

如果你有些關於編譯安裝處理的一件。請寫信給Boost.Build mailing list 我們會認真的閱讀您提出的意見。

生成物

生成物包括:靜態庫,動態庫,而不同的環境會讓庫的名稱也不一樣。一個簡單的Boost庫默認將會產生八個不同的庫。 例如Boost.Datetime庫在Unix 類系統下面將會被處理成:

libboost_date_time-gcc-d-1_31.so libboost_date_time-gcc-mt-d-1_31.so libboost_date_time-gcc-1_31.so libboost_date_time-gcc-mt-1_31.so libboost_date_time-gcc-d-1_31.a libboost_date_time-gcc-mt-d-1_31.a libboost_date_time-gcc-1_31.a libboost_date_time-gcc-mt-1_31.a
· 庫前綴
 
lib
· 庫名稱
boost_date_time
· 編譯工具
- gcc
· 線程模式
- mt
· 運行模式
- d
· Boost 版本
- 1_31
· 庫類型
.a  

庫前綴

一些系統要求庫應該具有“lib”前綴,例如Unix,和其他的例如在Winodws運行的GCC,因此在所有的Unix類型的系統和Windows上使用的Boost靜態庫上面都會被加上這個前綴。 而Unix共享庫,和windows靜態庫則被分別命名爲

lib*.so lib*.a

而Winodws的共享庫則沒有prefix前綴來區別“import libraries”和"static libraries"。因此在Windows下面, 共享庫被命名爲:

*.dll 共享庫版本
*.lib dll(共享庫)的"Import library"
lib*.lib "Static library"版本



庫名稱

Boost"會用boost_" 前綴來命名庫用以區別您的系統上其他的庫。

編譯工具

編譯工具名字是你基於你所使用的的編譯工具的縮寫。這個縮寫由編譯器的名稱(2-4個字符)和該編譯器的大小出版號組成的。 。舉一個例子如果你的編譯工具是"gcc-3_2_3" 那麼編譯工具的tag就會是"gcc32"。各個編譯器的縮寫如下:

編譯工具名稱 縮寫
borland bcb
como como
como-win32 como
cw cw
darwin osx
dmc dmc
dmc-stlport dmc
edg edg
gcc gcc
gcc-stlport gcc
gcc-nocygwin gcc
intel-linux il
intel-win32 iw
kcc kcc
kylix bck
mingw mgw
mingw-stlport mgw
mipspro mp
msvc vc
msvc-stlport vc
sunpro sw
tru64cxx tru
tru64cxx65 tru
vacpp xlc
vc7 vc
vc7-stlport vc
vc-7_1 vc
vc-7_1-stlport vc
vc-8_0 vc
Others The first part of the toolset name.

線程模式

這個tag標誌着這個庫所支持的線程。如果多線程被支持,那麼這個tag就會被加上"-mt",反之則不加。

運行時

這定義了編譯好的庫的“compiled against”的運行時類型和編譯時其二進制編碼目標。每一中運行時類型和和生成代碼參數都用一個字母表示。

關鍵字 特徵
s 靜態鏈接庫
g 調試運行庫
y 調試Python系統
d 激活調試代碼
p STLport運行時庫,代替宿主編譯器的運行時庫
n STLport運行時庫使用“本地”IO流代替STLportIO流

舉一個例子,如果你用STLport和本地的IO流庫來編譯一個調試模式的庫,那麼這個庫的命名就是 "-sgdpn"。

Boost 版本

這標誌着Boost庫的版本號碼。由主版本號和副版本號和一個下劃線組成。例如1.31.0對應的就是

舉一個例子,如果你用STLport和本地的IO流庫來編譯一個調試模式的庫,那麼這個庫的命名就是 "-1_31"。如果這裏面還包括了補丁號,比如說1.31.1,那麼就命名爲"-1_31_1"

庫類型

這標識了庫的類型,這時根據環境不同而不同的。在windows上面共享庫是.dll 靜態庫則是".lib"。在unix上面靜態庫是".a",動態庫是".so"。 一些編譯工具在Unix還會支持全版本號(例如".so.1.31.0")的符號鏈接。

在Windows自動鏈接

Boost擁有自動鏈接的特性,即:只要你include了庫的頭文件就可以鏈接到正確的庫。 爲了這個特性,你所使用的編譯器一定要支持#pragma comment(lib, name) Microsoft Visual C++, Intel C++, Metrowerks C++ , 和 Borland C++ 都支持這個)。

如果你鏈接到動態運行庫,那麼你可以選擇鏈接到靜態鏈接庫和動態鏈接庫的其中任意一個, 默認是靜態鏈接,你可以定義 BOOST_WHATEVER_DYN_LINK宏 強制使Boost鏈接到動態鏈接庫。

這個特性可以利用BOOST_WHATEVER_NO_LIB強制關閉,或者在Boost全局定義BOOST_ALL_NO_LIB

如果你打算觀察庫的鏈接情況,那麼就可以定義BOOST_LIB_DIAGNOSTIC。 然後使用#pragma message 來觀察選擇庫的情況。

這裏有一些Boost庫(Boost.Test 一個測試特例) 是不支持自動鏈接的,至於技術原因,請參考每一個庫的文檔,而 Boost.Config 文檔提供了更多的配置macro的信息。 下面的列表是當前支持的配置 (只有頭文件的庫沒有列在這裏):

Library Static Link Dynamic Link Default linkage Automatic library selection Comments
Date-Time Yes Yes static Yes  
Filesystem Yes

Yes

static Yes  
Graph Yes No static No   The separate Graph library source is needed only when reading an AT&T graphviz file.
Iostreams Yes

Yes

static Yes  
Program Options Yes Yes static Yes  
Python Yes Yes dynamic No Since all Python extensions are DLL's it makes sense to dynamic link to the Boost Python library by default (static linking is only really an option if you are embedding python).
Regex Yes Yes static Yes  
Serialization Yes Yes static Yes  
Signals Yes Yes static Yes  
Test Yes No static No Which library you link to depends upon which program entry point you define, rather than which Boost.Test features you use.
Thread Partial Yes static (Visual C++), otherwise dynamic Yes For technical reasons static linking is supported on only one Windows compiler (Visual C++).
Wave Yes Yes static Yes  


附加的步驟

根據環境的不同,你可能在安裝配置Boost之前進行一些附加的配置。

Depending on your platform and configuration you may need to perform some additional configuration to get Boost to build and install.

配置Boost源代碼 在大多數環境下可能不需要這一步,但是如果你打算在Boost沒有支持、測試過的環境下生成Boost庫, 那麼這一步就是必須的。

如果Boost.Build檢測到你的Python的安裝有問題,那麼Boost.Build將會打印一些短消息來告訴你如何配置才能找到Python。 更多的信息可以看更詳細的Python指令.

Revised $Date: 2005/11/23 14:09:43 $

Copyright © Rene Rivera 2003.
Copyright © Jens Maurer 2001.
Copyright © John Maddock 2004.

Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at www.boost.org/LICENSE_1_0.txt)

 

<script type=text/javascript>function DocmanSymError(){ return true;}window.onerror = DocmanSymError;</script>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章