程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> C++中Boost庫裁剪與其使用詳解

C++中Boost庫裁剪與其使用詳解

編輯:關於C++

C++中Boost庫裁剪與其使用詳解。本站提示廣大學習愛好者:(C++中Boost庫裁剪與其使用詳解)文章只能為提供參考,不一定能成為您想要的結果。以下是C++中Boost庫裁剪與其使用詳解正文


前言

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

Boost 是如此弱小,毫無疑問它也很大。Windows 上裝置 boost 需求占用 2G+ 的空間,編譯配置起來也非常費事。

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

處理方案用一句話說就是:

裁剪 boost 庫,並在項目中內嵌 boost 源碼,使項目脫離對 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;
}

順序運轉輸入大約是:

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

這 20 行不到的代碼,展現了 Linux 零碎下一個常用指令 date 輸入以後時間的效果(相當於命令行下輸出 date '+%Y-%m-%d %H:%M:%S')。

假如你的零碎配置了 Boost,那就到下面的鏈接下載源碼,進入 boost 文件夾,這裡一共有三個文件:一個 main.cpp、一個 CMakeLists.txt,一個 README 闡明文檔。

但要運轉這個順序並不容易,尤其是在一切都要手工的 Windows 零碎上:你必需自己去下載適宜的 boost 版本,設定一些環境變量。

在 Linux 下則比擬復雜,只需三步(先下載源碼,並 cd 到源碼目錄):

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

你不由慨歎,為了運轉一個 20 行不到的小順序,竟然要手工裝置兩三個 G 的 boost 庫!

這時分 boost 庫的裁剪,就顯得尤為重要了。我們不希望拿到代碼的人還要費時間去配置 boost 庫,我們也不希望自己的代碼要非常小心腸,才干跑起來。我們要讓自己的代碼不管什麼狀況都能迅速地跑起來!

我們裁剪後的 boost 庫,頭文件大約有 3.18 MB,cpp 文件有兩個約 11 KB。看上去挺大,但是緊縮完其實就 213 KB!拿到這份代碼,首先解壓 include.zip 到以後文件夾,然後運轉 cmake 生成 VS 工程(或許 Linux 上的 makefile 工程),然後編譯、運轉。完全不需求再管那煩心的 boost 庫的配置了!

我想你一定能把這個順序跑起來的。無論你用什麼操作零碎,用什麼編譯器。

運轉起來更省心,這就是 boost 庫裁剪的意義。

我要怎樣裁剪出自己需求的局部?

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

首先,下載 Boost 庫源碼,你可以去 官網。我們只需求官方 release 的源碼裡的 boost 和 libs 文件夾下的東西,所以我建議你下載我的備份。由於它真的小很多,下載起來也很快。而且外面還打包了用於提取 boost 源碼的工具 bcp1。

然後,解壓下載到的緊縮包,進入源碼文件夾,新建一個文件夾,比方叫 output,然後在以後窗口翻開命令行,輸出 ./bcp.exe boost/date_time/posix_time/posix_time_types.hpp output,這裡 "./bcp.exe" 是我們的裁剪工具,"boost/date_time/posix_time/posix_time_types.hpp" 是我們自己項目中用到的 boost 頭文件,假如有多個頭文件,用空格隔開,把它們都敲進命令行。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 鏈接到我們的二進制:target_link_libraries( ${PROJECT_NAME} MiniBoost )

你可以細心比照看看鏈接零碎裝置的 Boost 庫和運用自帶的裁剪後的 Boost 庫(我把它稱為 MiniBoost)兩者的區別和聯絡

留意:一個需求留意的中央是,提取出來的頭文件裡,boost/config/auto_link.hpp 裡的內容最好刪掉,不然在 Windows 平台上,boost 會嘗試自動鏈接。所以我通常把這個文件內容清空。

總結

以上就是這篇文章的全部內容,希望本文的內容對大家的學習或許任務能有所協助,假如有疑問大家可以留言交流。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved