Boost使用几条简单笔记
生活随笔
收集整理的這篇文章主要介紹了
Boost使用几条简单笔记
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
頭文件就是庫
使用者最常問的問題就是“我該怎么安裝Boost”,這個(gè)也是我一開始最關(guān)心的問題,Boost這點(diǎn)做的很好,將大部分實(shí)現(xiàn)都封裝在頭文件里,所以對(duì)于一些基本的Boost庫,其實(shí)是不需要安裝的,只需要將頭文件include到自己的程序里,當(dāng)然前提是你把Boost的所有用到的頭文件都拷貝了一份。
Boost是如何做到這點(diǎn)的?
這是因?yàn)锽oost的頭文件(*.hpp)包含了模板和內(nèi)聯(lián)函數(shù),這點(diǎn)隨便找一個(gè)hpp文件來看你就明白了,所以不需要去靜態(tài)鏈接活動(dòng)態(tài)鏈接二進(jìn)制lib庫了。
不過Boost的某些庫還是需要生成二進(jìn)制的庫的,如果你要使用他們,必須編譯安裝哦,他們是:
Boost.Filesystem
Boost.IOStreams
Boost.ProgramOptions
Boost.Python
Boost.Regex
Boost.Serialization
Boost.Signals
Boost.Thread
Boost.Wave
命名規(guī)則
libboost_filesystem-vc80-mt-sgdp-1_42.lib
前綴:統(tǒng)一為lib,但在Windows下只有靜態(tài)庫有l(wèi)ib前綴;
庫名稱:以"boost一”開頭的庫名稱,在這里是boost_filesystem;
編譯器標(biāo)識(shí):編譯該庫文件的編譯器名稱和版本,在這里是-vc80;
多線程標(biāo)識(shí):支持多線程使用-mt,沒有表示不支持多線程;
ABI標(biāo)識(shí):這個(gè)標(biāo)識(shí)比較復(fù)雜,標(biāo)識(shí)了Boost庫的幾個(gè)編譯鏈接選項(xiàng);
s:? 靜態(tài)庫標(biāo)識(shí);
gd:debug版標(biāo)識(shí);
p:? 使用STlport而不是編譯器自帶STL實(shí)現(xiàn);
版本號(hào):Boost庫的版本號(hào),小數(shù)點(diǎn)用下畫線代替,在這里是1_42;
擴(kuò)展名:在Windows上是lib,在Linux等類Unix操作系統(tǒng)上是a或者.so。
幾個(gè)常用宏
#define BOOST_ALL_DYN_LINK
同樣,此時(shí)boost也會(huì)默認(rèn)幫我們包含對(duì)應(yīng)的lib。如果不想使用boost提供的auto-link機(jī)制,或者對(duì)它的自動(dòng)鏈接不太放心的話(其實(shí)大可不必?fù)?dān)心),可以預(yù)先定義宏:
#define BOOST_ALL_NO_LIB
然后使用以下方法鏈接:
#pragma comment(lib, "boost_thread-vc100-mt-1_46.lib")或
#pragma comment(lib, "boost_thread-vc100-mt.lib")
這兩個(gè)lib其實(shí)是一樣的,實(shí)在不明白boost編譯時(shí)為什么每個(gè)庫都要復(fù)制一份,難道是因?yàn)楹笳咴谏?jí)boost版本后不用改代碼?另外還有一個(gè)比較有用的宏:
#define BOOST_LIB_DIAGNOSTIC
它可以讓VC在編譯時(shí)的output窗口中輸出程序具體鏈接了哪些boost庫以及鏈接順序。
加快Boost編譯的方法
可以采用預(yù)編譯頭來解決這個(gè)問題。
使用者最常問的問題就是“我該怎么安裝Boost”,這個(gè)也是我一開始最關(guān)心的問題,Boost這點(diǎn)做的很好,將大部分實(shí)現(xiàn)都封裝在頭文件里,所以對(duì)于一些基本的Boost庫,其實(shí)是不需要安裝的,只需要將頭文件include到自己的程序里,當(dāng)然前提是你把Boost的所有用到的頭文件都拷貝了一份。
Boost是如何做到這點(diǎn)的?
這是因?yàn)锽oost的頭文件(*.hpp)包含了模板和內(nèi)聯(lián)函數(shù),這點(diǎn)隨便找一個(gè)hpp文件來看你就明白了,所以不需要去靜態(tài)鏈接活動(dòng)態(tài)鏈接二進(jìn)制lib庫了。
不過Boost的某些庫還是需要生成二進(jìn)制的庫的,如果你要使用他們,必須編譯安裝哦,他們是:
Boost.Filesystem
Boost.IOStreams
Boost.ProgramOptions
Boost.Python
Boost.Regex
Boost.Serialization
Boost.Signals
Boost.Thread
Boost.Wave
命名規(guī)則
libboost_filesystem-vc80-mt-sgdp-1_42.lib
前綴:統(tǒng)一為lib,但在Windows下只有靜態(tài)庫有l(wèi)ib前綴;
庫名稱:以"boost一”開頭的庫名稱,在這里是boost_filesystem;
編譯器標(biāo)識(shí):編譯該庫文件的編譯器名稱和版本,在這里是-vc80;
多線程標(biāo)識(shí):支持多線程使用-mt,沒有表示不支持多線程;
ABI標(biāo)識(shí):這個(gè)標(biāo)識(shí)比較復(fù)雜,標(biāo)識(shí)了Boost庫的幾個(gè)編譯鏈接選項(xiàng);
s:? 靜態(tài)庫標(biāo)識(shí);
gd:debug版標(biāo)識(shí);
p:? 使用STlport而不是編譯器自帶STL實(shí)現(xiàn);
版本號(hào):Boost庫的版本號(hào),小數(shù)點(diǎn)用下畫線代替,在這里是1_42;
擴(kuò)展名:在Windows上是lib,在Linux等類Unix操作系統(tǒng)上是a或者.so。
幾個(gè)常用宏
#define BOOST_ALL_DYN_LINK
同樣,此時(shí)boost也會(huì)默認(rèn)幫我們包含對(duì)應(yīng)的lib。如果不想使用boost提供的auto-link機(jī)制,或者對(duì)它的自動(dòng)鏈接不太放心的話(其實(shí)大可不必?fù)?dān)心),可以預(yù)先定義宏:
#define BOOST_ALL_NO_LIB
然后使用以下方法鏈接:
#pragma comment(lib, "boost_thread-vc100-mt-1_46.lib")或
#pragma comment(lib, "boost_thread-vc100-mt.lib")
這兩個(gè)lib其實(shí)是一樣的,實(shí)在不明白boost編譯時(shí)為什么每個(gè)庫都要復(fù)制一份,難道是因?yàn)楹笳咴谏?jí)boost版本后不用改代碼?另外還有一個(gè)比較有用的宏:
#define BOOST_LIB_DIAGNOSTIC
它可以讓VC在編譯時(shí)的output窗口中輸出程序具體鏈接了哪些boost庫以及鏈接順序。
加快Boost編譯的方法
可以采用預(yù)編譯頭來解決這個(gè)問題。
總結(jié)
以上是生活随笔為你收集整理的Boost使用几条简单笔记的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: cmake Debug模式和Releas
- 下一篇: boost中unordered_map的