編譯安裝boost
A. 如何編譯libboost
您好,這樣的:
1、當前boost最新版本為1.55,下載地址http://sourceforge.net/projects/boost/files/boost/1.55.0/
或者從官網(www.boost.org)下載最新版的BOOST源碼,經過測試,2012和2013步驟相同,這里以2012為例。
2、打開VS2012 Native Tools Command,可以從開始--Microsoft Visual Studio 2012找到:將下載的 boost_1_55_0.zip 解壓在F盤,例如 F:\boost_1_53_0,執行bootstrap.bat。
3、編譯,可以簡單的使用b2 install,也可以指定存放目錄,或者尋找網上其它幫助文章。
查看幫助可以輸入:.\b2 --help
比如要開啟多線程編譯:b2 install threading=multi
設置生成的是debug或者release
備註:如果是使用VS2013,請指定輸出庫類型,否則會缺一個lib文件:
"無法打開文件 libboost_thread_vc120_mt_sgd-1_55.lib"。
在2013時,我是使用下面的語句進行編譯:
// 如果要獲取動態庫:
bjam install stage --toolset=msvc-12.0 --stagedir="C:\Boost\boost_vc_120" link=shared runtime-link=shared threading=multi debug release
// 如果是要獲取靜態庫:
bjam install stage --toolset=msvc-12.0 --stagedir="C:\Boost\boost_vc_120" link=static runtime-link=static threading=multi debug release
其中,注意修改--toolset=msvc-12.0,將12.0修改成對應的vs版本號,12.0是VS2013的版本號。
目標地址也要修改成你所需的。
注意,不要漏了install,它會幫你把頭文件集合到一個文件夾中。
編譯過程有一個復制過程,編譯需要的時間比較長,本次編譯過程中,會在C盤根目錄下生成一個boost文件夾,然後包含include和lib文件夾,這就是我們將要使用的頭文件和庫文件。
4、編譯完了我們就使用編譯在C盤中的文件。我將它們拷貝到了F盤,
需要簡單的配置兩個地方:這里使用絕對路徑,也可以配置環境來使用。
5、然後建立了一個工程測試。 在BoostTest中新建一個控制台應用程序,下圖三個文件分別是:
1) 將要使用的boost頭文件和庫文件。 2) 解壓出的boost文件夾,就是使用這個文件夾來進行 1 -- 3步驟的。 3)BoostTest 測試工程。
#include <iostream>
#include <boost/thread/thread.hpp>
void hello()
{
std::cout << "Hello world, I'm a thread!" << std::endl;
}
int main()
{
boost::thread thrd(&hello);
thrd.join();
}
編譯測試工程, 並運行,開始boost之旅吧。
B. VC66安裝BOOST的正則表達式庫和簡單使用,最好有圖文,分數不是問題
在WindowsXP下 VC6.0 編譯安裝Boost庫
基本思路:
一、需要什麼庫:boost有些庫是不用安裝的,即直接#include <>包含頭文件庫就行了,但是有些很有用的庫(thread-線程,regex-正則)需要根據不同的系統做不同的調整,所以必須編譯(即如果你要使用例如正則表達式類的話就需要編譯Boost庫了)。
二、如何編譯:
1、首先,生成bjam.exe。找到那個boostStrap.bat的東西,然後在CMD控制台下運行它,它會生成bjam.exe(類似c++的make,編譯.jam用)
2、然後就可以通過bjam來編譯boost庫了,在命令行下輸入bjam --help看選項。
如果嫌麻煩,可以一次將boost庫需要編譯的全部編譯了,bjam --build-type=complete,生成庫全在stage目錄下。■
可按照上述基本思路去解決。
(據說c6.0不支持目前比較新版本,下面以一些較舊的版本為例)
下面是參考步驟:
在安裝成功之前,我嘗試了許多版本,如1.40,其他的安裝了1.39,1.38,1.37,1.35都嘗試安裝過,但是都沒有成功。這里中原 因限於個人知識水平暫無法深究,但我以為可能是vc6.0無法支持高版本所致。於是我嘗試安裝1.34版本,終於解決安裝問題,由於只想使用其中的正則庫,文內將只以該文件編譯作為實例,其他的可以相同操作。
1、到Boost官方網站可以下載Boost的所有歷史版本,這里我下載的是1.341版。
2、將Boost壓縮包解壓到C:\Boost下。
3、將vc安裝目錄下\Microsoft Visual Studio\VC98\Bin 找到名為VCVARS32.BAT的批處理文件,並將其拷貝到C:\Boost\libs\regex\build目錄下。
4、cmd進入到C:\boost\libs\regex\build目錄下,執行VCVARS32.BAT(目的是使編譯文件命令nmake可用,否則 將提示nmake既不是內部也不是外部命令)後,敲入:nmake -f vc6.mak對其進行編譯,
5、數分鍾後,待編譯完成後,在C:\boost\libs\regex\build目錄下將產生名為vc的文件夾。我們將vc文件夾下的lib文件和 dll文件全部拷貝,在vc安裝目錄下xxx \Microsoft Visual Studio\VC98\下新建文件夾,名稱自定如BoostRegx,將lib和dll文件放入該文件夾中。
6、打開vc6.0選擇「Tools->Options->Directories->Include files,加入包含文件路徑"C:\BOOST"
7、選擇"Tools->Options->Directories->Library file" 編輯添加庫文件路徑 xxx\MICROSOFT VISUAL STUDIO\VC98\BOOSTREGX(這個是前面建立的文件夾BoostRegx的位置)。
8、編寫程序測試:
#include "stdafx.h"
#include <cstdlib>
#include <stdlib.h>
#include <boost/regex.hpp>
#include <string>
#include <iostream>
using namespace std;
using namespace boost;
regex expression("^select ([a-zA-Z]*) from ([a-zA-Z]*)");
int main(int argc, char* argv[])
{
std::string in;
cmatch what;
cout << "enter test string" << endl;
getline(cin,in);
if(regex_match(in.c_str(), what, expression))
{
for(int i=0;i<what.size();i++)
cout<<"str :"<<what.str()<<endl;
}
else
{
cout<<"Error Input"<<endl;
}
return 0;
}
9、由於Boost的Bug問題,寫段程序,頭文件,空間都引用正常,但編譯時編譯器卻告知連接錯誤 LNK1104: cannot open file "libboost_regex-vc6-sgd-1_34_1.lib",這樣可以通過修改Boost.Regx下相關lib文件的文件名改為 libboost_regex-vc6-sgd-1_34_1.lib(與錯誤里相同)即可。
10、再次vc里的編譯,ok了,0 error(s), 0 warning(s)。
我在VC6.0中裝了boost庫,測試程序的時候出現錯誤,說不能打開stdafx.h文件? 這個不是boost的問題,在項目->GUI屬性->c/c++->預編譯頭->創建/使用預編譯頭中選擇創建預編譯頭-確定即可。
《vc6.0環境下編譯Boost 1.34.1》:http://blog.sina.com.cn/s/blog_4bb397fa0100e12a.html
《vc6.0安裝boost1.34.1》:http://student.csdn.net/space.php?uid=119638&do=blog&id=36485
