VS2008下Boost庫的安裝編譯

2021-06-19 23:39:18 字數 2427 閱讀 4910

或下拉 庫檔案 加上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官網的《geting started on windows》(

)提到了boost庫的命名,摘錄如下:

以 libboost_regex-vc71-mt-d-1_34.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)

/mtlibboost_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)

/mdboost_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。鏈結過程中,鏈結器會發現採用了不同的執行時庫,所以會出現上述錯誤。 

boost.regex預設使用的靜態鏈結方式,如果希望使用動態鏈結方式,如何實現呢? 定義巨集boost_regex_dyn_link。要注意,一定要在包含regex標頭檔案之前定義該巨集:

#define

boost_regex_dyn_link

#include 

<

boost

/regex.hpp

>

關於此巨集的解釋參見 

VS2008安裝boost 手記

1。boost庫2008年3月底發布了1.35.0版本,包括了12個新的庫和若干對於新庫的修正。請參見來獲取詳細的更新資訊。最大的喜訊就是提供了對於visual studio 2008編譯器的支援 1.34也可以,但是需要手工修改 1.icu icu提供了unicode和國際化支援,目前的版本是3....

VS2008下gtkmm環境配置

2.開啟windows命令列 pkg config gtkmm 2.4 cflags 1.txt cd到gtkmm目錄下的bin目錄 這裡是include的標頭檔案路徑,編譯時要用到。如 mms bitfields ie mingw gtkmm include gtkmm 2.4 ie mingw ...

SNMP 在vs2008下的編譯

專案要做snmp的網路管理軟體,用c 開發,在網上查了些資料,決定用snmp 開發包來做。我用的環境是vs2008,在網上基本就沒找到資料,查了很多在vc6.0下編譯的,發現大家也都有很多問題,我自己就試了很久才成功,怕之後忘了,來記錄下來 是在這篇文章的基礎上做的謝謝 libdes l 4.01a...