Windows 7 下編譯boost庫
吐槽:樓主出來工作快2年了,自我感覺在公司還不錯,得到領導的認可,但是由於一些原因前段時間準備換工作,面試的時候被面試官問的無地自容。哎。深感自責,於是呼決定發奮圖強,不苟安於現狀,希望後面能夠再接再厲更上一層樓。
買了一本書,boost開發指南,希望能夠從中汲取到營養,也和大家分享。共同進步。
話不多說,先從安裝和編譯開始。苦逼樓主是用的作業系統是win7。當然比不上平時自己在家都使用某命令列的高大上了。
後面的分享都是在win7的系統上進行操作的。
1、先下載boost庫,苦逼樓主下載的是最新版,程式猿也追求時尚啊boost_1_55_0
2、解壓,樓主是把解壓後的目錄放到d盤的。D:\boost_1_55_0
3、進入D:\boost_1_55_0,找到bootstrap.bat,執行得到bjam.exe
4、到這一步都沒問題的話,那就恭喜你進入後面的編譯。苦逼樓主使用的是vs2010因此:
toolset=msvc-10.0,後面的版本根據vs的版本來填值得,具體對應參看下面:
vs2003 : msvc-7.1
vs2005 : msvc-8.0
vs2008 : msvc-9.0
vs2010 : msvc-10.0
build-type選項指定編譯型別,
layout選項指定需要編譯的庫名及標頭檔案的地址目錄名的生成策略。預設Windows下為versioned
下面是樓主編譯時的編譯指令:
bjam stage --toolset=msvc-10.0--build-type=complete --layout=versioned
5、編譯過程中可能會產生一些警告,這個可以不管。當然你要是追求完美的話,非看他不順眼的話也可以去掉,去掉的方法如下:
修改D:\boost\boost_1_55_0\tools\build\v2\user-config.jam,在
#-------------------
# MSVCconfiguration.
#-------------------
# Configure msvc(default version, searched for in standard locations and PATH).
# using msvc ;
# Configure specificmsvc version (searched for in standard locations and PATH).
# using msvc : 8.0 ;
下方新增:
using msvc : 8.0 : :<compileflags>/wd4819 <compileflags>/D_CRT_SECURE_NO_DEPRECATE<compileflags>/D_SCL_SECURE_NO_DEPRECATE<compileflags>/D_SECURE_SCL=0 ;
注意:如果是VS2008或VS2010則,分別要對應修改成:
using msvc : 9.0 : :<compileflags>/wd4819 <compileflags>/D_CRT_SECURE_NO_DEPRECATE<compileflags>/D_SCL_SECURE_NO_DEPRECATE<compileflags>/D_SECURE_SCL=0 ;
using msvc : 10.0 :: <compileflags>/wd4819 <compileflags>/D_CRT_SECURE_NO_DEPRECATE<compileflags>/D_SCL_SECURE_NO_DEPRECATE<compileflags>/D_SECURE_SCL=0 ;
其中,/wd 是Visual C++編譯器選項,用於指定編譯器如何為給定編譯生成警告。
/wd n表示禁用指定的編譯器警告,其中 n 是編譯器警告編號。例如,/wd4819 禁用編譯器警告 C4819。
在系統中編譯 ANSI原始檔時,如果有一個內碼表不能表示該檔案中的所有字元,則會出現 C4819 警告。
/D(前處理器定義)用於定義原始檔的預處理符號。_CRT_SECURE_NO_DEPRECATE、_SCL_SECURE_NO_DEPRECATE、_SECURE_SCL等預處理巨集定義分別能遮蔽一部分warning警告資訊,詳細參見MSDN。
因此,上述新增內容中只是添加了幾個編譯選項,用於遮蔽一些非必要警告資訊。
6、編譯是一個漫長的等待過程,這時候你可以去泡泡茶、喝杯咖啡了……
…….一隻烏鴉悄悄地飛過…..拉了一泡屎…...落在了淺嘗者的頭上…...
7、到這一步,說明你已經編譯完成了,開啟你的vs吧,然後新建一個工程,那就是helloword,樓主的是vs2010,然後再工程屬性中新增boost的標頭檔案目錄和lib庫,我的是這樣設定的:
8、編寫第一個boost程式碼程式
#include <iostream>
#include "boost/thread/thread.hpp"
using namespace std;
using namespace boost;
void Hello()
{
cout<<"hello"<<endl;
return ;
}
int main()
{
thread thd(&Hello);
thd.join();
getchar();
return 0;
}
編譯執行:
如圖所示,這說明你的boost‘已經正確安裝和編譯了,下面我們將繼續討論boost元件的應用