歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> VS2008下Boost庫的安裝編譯

VS2008下Boost庫的安裝編譯

日期:2017/3/1 9:41:08   编辑:Linux編程

下載boost庫(最好去官網下,一般有SGI(GCC+用的較多)和BOOST之分,VS下用BOOST)

http://sourceforge.net/project/showfiles.php?group_id=7586&package_id=8041

或http://sourceforge.net/projects/boost/files/boost-docs/1.52.0/

下載boost_1_55_0(最新版本執行方法一樣,改下名字即可)壓縮文件,解壓縮到d:\boost_1_55_0\(可以任何位置,你覺得合適就可以)目錄下
1.編譯bjam
從開始->程序->Microsoft Visual Studio 2008->Visual Studio Tools->Visual Studio 2008 命令提示(一定要從這進),命令提示cd到d:\boost_1_55_0\下執行bootstrap.bat,會在d:\boost_1_55_0\產生bjam.exe。
2.編譯boost
命令提示cd到d:\boost_1_55_0\下執行
bjam --without-python --toolset=msvc-9.0 --prefix=d:\boost install
  參數說明
  --without-python 表示不使用 python
  --toolset : 所使用compiler,Visual Studio 2008為msvc-9.0
  --prefix:指定編譯後library的安裝目錄
  這一步要花很長時間(大約20分鐘),看你的電腦速度
3.設定vs2008環境
啟動vs2008->工具->選項-> 項目和解決方案 -> VC++目錄(Tools->Options->Project and Solutions->VC++ Directories)
下拉 庫文件 加上d:\boost\lib
下拉 包含文件 加上d:\boost\include\boost-1_55
這樣基本已經完成了!
注意:如果發現libboost_regex-vc80-mt-gd-1_34_1.lib之類文件提示錯誤時,是找不到該文件!
就到D:\boost\lib把對應的文件libboost_regex-vc90-mt-gd-1_55.lib改為libboost_regex-vc80-mt-gd-1_55.lib(可以用記事本或者寫字板打開,然後保存)就可以一般是80和90的差別(2005是80,2008是90)

不知說的夠詳細不,希望不清楚的同學留言,我每天都登陸,可以幫忙解決問題。

可以使用 bjam --help查看幫助。下面是編譯共享和靜態的參數。

bjam stage --toolset=msvc-9.0 --stagedir="d:\boost\lib\"link=shared runtime-link=shared threading=multi debug release

bjam stage --toolset=msvc-9.0 --stagedir="d:\boost\lib\"link=staticruntime-link=staticthreading=multi debug release

Boost程序庫完全開發指南——深入C++“准”標准庫高清PDF版 http://www.linuxidc.com/Linux/2013-07/87574.htm

Ubuntu下編譯安裝boost庫 http://www.linuxidc.com/Linux/2013-07/87573.htm

Ubuntu下編譯boost 1.52b http://www.linuxidc.com/Linux/2013-02/79004.htm

Ubuntu編譯安裝boost並在eclipse C/C++中使用 http://www.linuxidc.com/Linux/2011-04/34790.htm

Boost官網的《Geting Started On Windows》(http://www.boost.org/doc/libs/1_38_0/more/getting_started/windows.html)提到了Boost庫的命名,摘錄如下:

以 libboost_regex-vc71-mt-d-1_34.lib 為例:

  • lib
    前綴:除了Microsoft Windows之外,每一個Boost庫的名字都以此字符串開始。在Windows上,只有普通的靜態庫使用lib前綴;導入庫和DLL不使用。
  • boost_regex
    庫名稱:所有boost庫名文件以boost_開頭。
  • -vc71
    Toolset 標記:標識了構建該庫所用的toolset和版本。
  • -mt
    Threading 標記:標識構建該庫啟用了多線程支持。不支持多線程的庫沒有-mt。
  • -d
    ABI標記:編碼了影響庫和其他編譯代碼交互的細節。對於每一種特��,向標記中添加一個字母:
    Key Use this library when: s 靜態鏈接到C++標准庫和編譯器運行時支撐庫 g 使用標准庫和運行時支撐庫的調試版本 y 使用Python的特殊調試構建 d 構建代碼的調試版本 p 使用STLPort標准庫而不是編譯器提供的默認庫 n 使用STLPort已被棄用的“native iostreams”
  • -1_34
    版本標記:完整的Boost發布號,下劃線代替點。例如,1.31.1版本將被標記為“-1_31_1”。
  • .lib
    擴展名:取決於操作系統。在大多數unix平台上,.a是靜態庫,.so是共享庫。在Windows上,.dll表示共享庫,.lib是靜態或導入庫。

下表是對Regex庫編譯後的文件名:

文件名 含義 編譯使用該庫的程序時應使用的編譯選項 libboost_regex-vc90-mt-sgd-1_38.lib 靜態庫,多線程,調試版本
使用靜態調試版本C運行時庫(LIBCMTD.LIB和LIBCPMTD.LIB) /MTd libboost_regex-vc90-mt-s-1_38.lib 靜態庫,多線程
使用靜態版本C運行時庫(LIBCMT.LIB和LIBCPMT.LIB) /MT libboost_regex-vc90-mt-gd-1_38.lib 靜態庫,多線程,調試版本
使用動態調試版本C運行時庫(MSVCRTD.LIB和MSVCPRTD.LIB) /MDd libboost_regex-vc90-mt-1_38.lib 靜態庫,多線程
使用動態版本C運行時庫(MSVCRT.LIB和MSVCPRT.LIB) /MD boost_regex-vc90-mt-gd-1_38.lib 導入庫(boost_regex-vc90-mt-gd-1_38.dll),多線程,調試版本 boost_regex-vc90-mt-1_38.lib 導入庫(boost_regex-vc90-mt-1_38.dll)多線程

需要注意的是,鏈接時,所使用的Regex庫文件名必須和編譯選項匹配,否則會造成如下鏈接錯誤:

LINK : warning LNK4098: defaultlib '×××××' conflicts with use of other libs; use /NODEFAULTLIB:library

原因是,當編譯時,cl.exe(也就是VC的編譯器)會根據上述編譯選項在編譯成的obj文件中植入相應的defaultlib文件名(使用DUMPBIN /DIRECTIVE ***,lib可以查看),如/MT對應的就是LIBCMT.LIB(C)和LIBCPMT.LIB(C++標准庫)。當鏈接器處理該obj文件時,會從文件中取出該defaultlib文件名,將其放在命令行庫列表的最後以供使用。對於靜態庫的處理也是如此,靜態庫也是由一些obj文件組成的,每個obj文件中也根據當時的編譯選項被植入了相應的defaultlib。當鏈接器處理靜態庫時,也會將涉及到的obj文件中的defaultlib放在命令行庫列表的最後。假設,我們的程序使用/MT編譯,那個對應的defaultlib就是LIBCMT.LIB(C)和LIBCPMT.LIB(C++標准庫)。而使用的是libboost_regex-vc90-mt-sgd-1_38.lib,它對應的defaultlib就是LIBCMTD.LIB和LIBCPMTD.LIB。鏈接過程中,鏈接器會發現采用了不同的運行時庫,所以會出現上述錯誤。

幸運的是,Visual C++支持自動鏈接,當包含Regex的頭文件時,Regex會根據當前工程的編譯選項(不同的編譯選項會定義不同的宏,具體參見上一篇C運行時庫)自動告訴編譯器將哪個文件送給鏈接器。

Boost.Regex默認使用的靜態鏈接方式,如果希望使用動態鏈接方式,如何實現呢? 定義宏BOOST_REGEX_DYN_LINK。要注意,一定要在包含regex頭文件之前定義該宏:

#define BOOST_REGEX_DYN_LINK
#include <boost/regex.hpp>

關於此宏的解釋參見 http://www.boost.org/doc/libs/1_38_0/libs/regex/doc/html/boost_regex/configuration/linkage.html

Boost 的詳細介紹:請點這裡
Boost 的下載地址:請點這裡

Copyright © Linux教程網 All Rights Reserved