亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C++中Boost庫裁剪與其應(yīng)用詳解

 更新時間:2016年10月27日 10:01:38   投稿:daisy  
大家都知道STL全稱"標(biāo)準(zhǔn)模板庫(Standard Template Library)",其實(shí)它是一套標(biāo)準(zhǔn),可能有不同的實(shí)現(xiàn),它是 C++ 的"標(biāo)準(zhǔn)庫"。Boost 則是一個 C++ 庫,被稱為"C++ 準(zhǔn)標(biāo)準(zhǔn)庫"。那么這篇文章文章我們就來詳細(xì)的介紹C++Boost庫的裁剪與其應(yīng)用,感興趣的朋友可以一起學(xué)習(xí)。

前言

Boost 庫涵蓋的范圍極廣,有字符串和文本處理相關(guān)子庫比如 format 庫和 regexp 庫,有容器相關(guān)子庫比如 variant 庫(和 Qt 的 QVariant 有得一拼),有迭代器子庫比如 tokenizer 庫(可以把字符進(jìn)行 tokenize),還有算法、函數(shù)對象和高階編程相關(guān)子庫如functional 庫、lambda 庫和 signal 庫,還有泛型編程、模板編程子庫如 call traits、mpl,還有并發(fā)編程相關(guān)的 thread 庫,等等等等。

Boost 是如此強(qiáng)大,毫無疑問它也很大。Windows 上安裝 boost 需要占用 2G+ 的空間,編譯配置起來也十分麻煩。

本文討論的是如何不配置 boost 庫而使用 boost 庫。

解決方案用一句話說就是:

裁剪 boost 庫,并在項(xiàng)目中內(nèi)嵌 boost 源碼,使項(xiàng)目脫離對 boost 庫的依賴。

通過一個例子說明 boost 庫裁剪的意義

或許你還是不明白 boost 庫裁剪到底是啥意思,那我們一起來跑一個例子。以我的 cmake-templates 里面的一個 boost 代碼為例,源碼只有一個 main.cpp,里面只有如下幾行:

#include <cstdio>
#include <boost/date_time/posix_time/posix_time_types.hpp>

int main( void )
{
 namespace pt = boost::posix_time;
 pt::ptime now = pt::second_clock::local_time();

 printf( "%s\t->\t%04d-%02d-%02d %02d:%02d:%02d\n"
   , "date '+%Y-%m-%d %H:%M:%S'"
   , (int)now.date().year()
   , (int)now.date().month()
   , (int)now.date().day()
   , (int)now.time_of_day().hours()
   , (int)now.time_of_day().minutes()
   , (int)now.time_of_day().seconds() );

 return 0;
}

程序運(yùn)行輸出大概是:

date '+%Y-%m-%d %H:%M:%S' -> 2016-07-11 19:33:19

這 20 行不到的代碼,展示了 Linux 系統(tǒng)下一個常用指令 date 輸出當(dāng)前時間的效果(相當(dāng)于命令行下輸入 date '+%Y-%m-%d %H:%M:%S')。

如果你的系統(tǒng)配置了 Boost,那就到上面的鏈接下載源碼,進(jìn)入 boost 文件夾,這里一共有三個文件:一個 main.cpp、一個 CMakeLists.txt,一個 README 說明文檔。

但要運(yùn)行這個程序并不容易,尤其是在一切都要手工的 Windows 系統(tǒng)上:你必須自己去下載合適的 boost 版本,設(shè)定一些環(huán)境變量。

在 Linux 下則比較簡單,只要三步(先下載源碼,并 cd 到源碼目錄):

sudo apt-get install -y libboost-all-dev cmake
mkdir build && cd build
cmake .. && make && ./BOOST

你不禁感慨,為了運(yùn)行一個 20 行不到的小程序,居然要手工安裝兩三個 G 的 boost 庫!

這時候 boost 庫的裁剪,就顯得尤為重要了。我們不希望拿到代碼的人還要費(fèi)時間去配置 boost 庫,我們也不希望自己的代碼要十分小心地,才能跑起來。我們要讓自己的代碼不論什么情況都能迅速地跑起來!

我們裁剪后的 boost 庫,頭文件大概有 3.18 MB,cpp 文件有兩個約 11 KB??瓷先ネΥ螅菈嚎s完其實(shí)就 213 KB!拿到這份代碼,首先解壓 include.zip 到當(dāng)前文件夾,然后運(yùn)行 cmake 生成 VS 工程(或者 Linux 上的 makefile 工程),然后編譯、運(yùn)行。完全不需要再管那煩心的 boost 庫的配置了!

我想你一定能把這個程序跑起來的。無論你用什么操作系統(tǒng),用什么編譯器。

運(yùn)行起來更省心,這就是 boost 庫裁剪的意義。

我要怎么裁剪出自己需要的部分?

我們來深究一下怎么拿到上面那 3.18 MB 的頭文件,11 KB 的 cpp 文件。

首先,下載 Boost 庫源碼,你可以去 官網(wǎng)。我們只需要官方 release 的源碼里的 boost 和 libs 文件夾下的東西,所以我建議你下載我的備份。因?yàn)樗娴男『芏?,下載起來也很快。而且里面還打包了用于提取 boost 源碼的工具 bcp1。

然后,解壓下載到的壓縮包,進(jìn)入源碼文件夾,新建一個文件夾,比如叫 output,然后在當(dāng)前窗口打開命令行,輸入 ./bcp.exe boost/date_time/posix_time/posix_time_types.hpp output,這里 "./bcp.exe" 是我們的裁剪工具,"boost/date_time/posix_time/posix_time_types.hpp" 是我們自己項(xiàng)目中用到的 boost 頭文件,如果有多個頭文件,用空格隔開,把它們都敲進(jìn)命令行。2最后的 "output" 是輸出文件夾。

在 cmake 里,這個過程大概是

1)在源碼根目錄新建 include 文件夾,在根目錄的 CMakeLists.txt 加上 include_directories( ${CMAKE_SOURCE_DIR} );

2)新建 libs 文件夾,把裁剪出來的 cpp 文件放到這個文件下的 MiniBoost 文件加下,然后參考 district10/bcp-example-1/libs 寫好 CMakeLists 文件,再到根目錄的 CMakeLists 文件加上 add_subdirectory( libs);3)將裁剪出來的 miniboost 鏈接到我們的二進(jìn)制:target_link_libraries( ${PROJECT_NAME} MiniBoost ) 。

你可以仔細(xì)對比看看鏈接系統(tǒng)安裝的 Boost 庫和使用自帶的裁剪后的 Boost 庫(我把它稱為 MiniBoost)兩者的區(qū)別和聯(lián)系

注意:一個需要注意的地方是,提取出來的頭文件里,boost/config/auto_link.hpp 里的內(nèi)容最好刪掉,不然在 Windows 平臺上,boost 會嘗試自動鏈接。所以我通常把這個文件內(nèi)容清空。

總結(jié)

以上就是這篇文章的全部內(nèi)容,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能有所幫助,如果有疑問大家可以留言交流。

相關(guān)文章

  • 聊聊C++中右值引用和移動構(gòu)造函數(shù)的使用

    聊聊C++中右值引用和移動構(gòu)造函數(shù)的使用

    這篇文章主要是來和大家一起聊聊C++中右值引用和移動構(gòu)造函數(shù)的使用,文中通過示例進(jìn)行了詳細(xì)講解,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2022-07-07
  • gdb調(diào)試的簡單操作總結(jié)

    gdb調(diào)試的簡單操作總結(jié)

    gdb是一個命令行下的、功能強(qiáng)大的調(diào)試器,這篇文章主要為大家詳細(xì)介紹了gdb?調(diào)試的一些簡單操作,感興趣的小伙伴可以跟隨小編一起了解一下
    2023-08-08
  • C語言算法的定義及分析詳解

    C語言算法的定義及分析詳解

    這篇文章主要為大家詳細(xì)介紹了C語言算法的定義及分析,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • C語言strcpy庫函數(shù)詳解

    C語言strcpy庫函數(shù)詳解

    這篇文章主要為大家介紹了C語言strcpy庫函數(shù),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-11-11
  • 簡單談?wù)凜語言中的= 和==、!=

    簡單談?wù)凜語言中的= 和==、!=

    這篇文章主要給大家介紹了關(guān)于C語言中= 和==、!=的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • C語言枚舉與聯(lián)合圖文梳理講解

    C語言枚舉與聯(lián)合圖文梳理講解

    枚舉顧名思義就是把所有的可能性列舉出來,像一個星期分為七天我們就可以使用枚舉,聯(lián)合體是由關(guān)鍵字union和標(biāo)簽定義的,和枚舉是一樣的定義方式,不一樣的是,一個聯(lián)合體只有一塊內(nèi)存空間,什么意思呢,就相當(dāng)于只開辟最大的變量的內(nèi)存,其他的變量都在那個變量占據(jù)空間
    2023-01-01
  • C語言簡明講解類型轉(zhuǎn)換的使用與作用

    C語言簡明講解類型轉(zhuǎn)換的使用與作用

    類型轉(zhuǎn)換(type?cast),是高級語言的一個基本語法。它被實(shí)現(xiàn)為一個特殊的運(yùn)算符,以小括號內(nèi)加上類型名來表示,接下來讓我們一起來詳細(xì)了解
    2022-04-04
  • C++實(shí)現(xiàn)簡易通訊錄功能

    C++實(shí)現(xiàn)簡易通訊錄功能

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)簡易通訊錄功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • C++ Boost Coroutine使用協(xié)程詳解

    C++ Boost Coroutine使用協(xié)程詳解

    通過Boost.Coroutine,可以在C++中使用協(xié)程。協(xié)程是其他編程語言的一個特性,通常使用關(guān)鍵字yield來表示協(xié)程。在這些編程語言中,yield可以像return一樣使用
    2022-11-11
  • C語言?模擬實(shí)現(xiàn)strlen函數(shù)詳解

    C語言?模擬實(shí)現(xiàn)strlen函數(shù)詳解

    在 C 語言 中我們要獲取 字符串 的長度,可以使用strlen 函數(shù),strlen 函數(shù)計(jì)算字符串的長度時,直到空結(jié)束字符,但不包括空結(jié)束字符,因?yàn)?nbsp;strlen 函數(shù)時不包含最后的結(jié)束字符的,因此一般使用 strlen函數(shù)計(jì)算的字符串的長度會比使用 sizeof 計(jì)算的字符串的字節(jié)數(shù)要小
    2022-04-04

最新評論