linux boost教程,Linux上安裝使用Boost入門指導

獲得boost

boost分布

只需要頭文件的庫

使用boost建立一個簡單的程序

準備使用boost二進制文件庫

把你的程序鏈接到boost庫

1.獲得boost

解壓

2.boost分布

boost_1_46_1.........................boost根目錄

boost/.....................................所有boost頭文件

libs/........................................Tests,.cpps,docs等的庫文件

注意:

(1)boost根目錄(通常是/usr/local/boost_1_46_1)想到$BOOST_ROOT變量中

(2)編譯程序時如果用到boost庫,需要指定頭文件路徑-I$BOOST_ROOT

(3)因為所有頭文件都在boost文件夾下,并且頭文件都是hpp后綴,所#include形如:

#include

3.只需要頭文件的庫

絕大多數的boost庫都是header-noly的:它們完全由包含模板和inline函數的頭文件組成,不需要單獨編譯和二進制庫文件,也不需要鏈接時特別對待。

只有下面的boost庫必需單獨built:

Boost.Filesystem

Boost.GraphParallel

Boost.IOStreams

Boost.MPI

Boost.ProgramOptions

Boost.Python (see the Boost.Python build documentation before building and installing it)

Boost.Regex

Boost.Serialization

Boost.Signals

Boost.System

Boost.Thread

Boost.Wave

下面這些單獨built是可選(optional)的:

Boost.DateTime  Boost.Graph  Boost.Math  Boost.Random  Boost.Test

4.使用boost建立簡單的程序

下面的程序(example.cc)只用到header-only庫。它是從標準輸入中讀入一串整數,使用Boost.Lambda每個數乘以3后輸出。

#include

#include

#include

#include

int main()

{

using namespace boost::lambda;

typedef std::istream_iterator in;

std::for_each(

in(std::cin), in(), std::cout << (_1 * 3) <

}

編譯:g++? -I$BOOST_ROOT? example.cc? -o? example

運行:echo 1 2 3 | ./example

5.準備使用boost二進制庫

如果你的程序用到需要單獨編譯的boost庫,你需要首先獲得這些二進制庫文件。

5.1編譯安裝所有二進制庫文件

cd $BOOST_ROOT

./bootstrap.sh? --help

./bootstrap.sh? --prefix=/usr/local    ##其實默認情況下prefix的值就是/usr/local

此時生成了bjam可執行文件,這個東西就是用來編譯boost庫的。

./bjam? install

5.2僅安裝指定的二進制庫文件

下面均使用系統默認的編譯器,即Linux上的gcc。

5.2.1安裝Boost.build

Boost.Build是一個用于開發、測試、安裝軟件的基于文本的系統。Boost.Build的生成安裝步驟:

(1)cd $BOOST_ROOT/tools/build/v2

(2)./bootstrap.sh

(3)./bjam? install? --prefix=/usr/local/      ##prefix是Boost.Build安裝位置

(4)把prefix/bin放到PATH中          ##當然/usr/local/bin已經PATH中了

5.2.2調用bjam時不指定toolset則使用系統默認的編譯器。如果你的Linux上裝了不同版本的gcc,則使用toolset選項時可以指定版本號:toolset=gcc-4.4

5.2.3指定build路徑,通過--build-dir=/path選項,不指定時默認在當前路徑下創建bin.v2文件夾,把生成的文件放在其內。

5.2.4調用bjam

cd? $BOOST_ROOT

bjam? --build-dir=./build-boost? toolset=gcc?? stage

上面的命令將創建static and shared non-debug multi-threaded variants of the libraries.如果要建立所有的variants,請使用"--build-type=complete"選項。

所有的boost二進制庫文件將放在stage/lib/下,如果你要另外指定路徑,請使用“--stagedir=directory"選項。

注意為節省build時間,你可能需要少build一些庫文件:

查看庫文件名稱  --show-libraries

限制build哪些庫  --with-libraryname或者--without-libraryname

選擇特定的build variant  adding release or debug to the command line

友情提示:Boost.Build會生成很多報告輸出,如果你能保證建立過程不出錯誤,你可以禁止這些輸出以節省時間。方法:在命令后追加”>build.log? 2>&1"

6.把你的程序鏈接到boost庫

下面的程序是從郵件中抽取“主題”內容,它用到了Boost.Regex庫,這個庫是需要單獨編譯的。

#include

#include

#include

int main()

{

std::string line;

boost::regex pat("^Subject: (Re: |Aw: )*(.*)" );

while (std::cin)

{

std::getline(std::cin, line);

boost::smatch matches;

if (boost::regex_match(line, matches, pat))

std::cout << matches[2] << std::endl;

}

}

編譯:

方法A:g++? -I$BOOST_ROOT? example.cc -o example? $BOOST_ROOT/stage/lib/ -lboost_regex.a

方法B:g++? -I$BOOST_ROOT? example.cc -o example? -L$BOOST_ROOT/stage/lib/ -lboost_regex

當你要使用多個庫源于一個路徑時使用方法B就省力了(paid off)。注意到方法B中并沒有指定.a(靜態庫)還中.so(動態庫),系統將自動地幫你選擇使用靜態庫還是動態庫,當然你可以通過選項“-static"顯示地指定。

6.1庫文件的命名方式

拿libboost_regex-gcc34-mt-d-1_36來說:

lib....................................通用前綴

boost_regex.....................庫名

gcc34...............................編譯時使用的toolset是gcc-3.4

mt...................................編譯時是支持多線程的

d/s/g/y/p..........................ABI tag

1_36................................Tag version

6.2運行我們的程序

首先新建一個文本文件mail.txt

To: George Shmidlap

From: Rita Marlowe

Subject: Will Success Spoil Rock Hunter?

---

See subject.

如果我們的程序鏈接到了一個共享動態庫,我們需要讓系統知道到哪兒去加載它。請看我的~/.bashrc文件:

#boost

export BOOST_ROOT="/usr/local/boost_1_46_1"

export LD_LIBRARY_PATH="/usr/local/boost_1_46_1/stage/lib:$LD_LIBRARY_PATH"

運行程序:./example?

應該輸出

Will Success Spoil Rock Hunter?0b1331709591d260c1c78e86d0c51c18.png

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/533000.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/533000.shtml
英文地址,請注明出處:http://en.pswp.cn/news/533000.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

vps如何linux內核4.19,Linux kernel 4.19 RC1 發布,一個相當大的版本

原標題&#xff1a;Linux kernel 4.19 RC1 發布&#xff0c;一個相當大的版本Linus Torvalds今天發布了第一個候選版本(RC)&#xff0c;正式啟動了即將推出的Linux 4.19內核系列的開發周期。自Linux 4.18內核系列推出以來已經過去兩周了&#xff0c;因此下一個主要版本Linux ke…

linux下變量名長度,Linux中shell的變量介紹

Linux中shell的變量介紹發布時間&#xff1a;2020-06-24 16:20:39來源&#xff1a;億速云閱讀&#xff1a;112作者&#xff1a;元一這期內容當中的小編將會給大家帶來有關Linux中shell的變量介紹&#xff0c;以專業的角度為大家分析和敘述&#xff0c;閱讀完這篇文章希望大家可…

0 0/2 * * * ? linux文本含義,Linux基礎2.0

1、硬盤使用的步驟識別硬盤 > 分區規劃 > 格式化 > 掛載使用2、列出創建ext3、ext4、xfs、fat32文件系統的格式化工具及用法mkfs.ext3 分區設備路徑mkfs.ext4 分區設備路徑mkfs.xfs 分區設備路徑mkfs.vfat -F 32 分區設備路徑3、開機自動掛載配置文件及6個字段/etc/fs…

linux如何加載鏡像,linux可以加載iso鏡像文件到啟動項嗎

該樓層疑似違規已被系統折疊 隱藏此樓查看此樓樓主的需求描述不清&#xff0c;不作評述。只說下關于樓上一些吧友提到的grub loopback設備可mount iso并讀取其中文件的功能未讀過grub1/2的源碼&#xff0c;不太了解其實現原理&#xff0c;但從應用上來說&#xff0c;這個設備不…

10個linux awk文本處理經典案例,關于AWK的10個經典案例

1、分析訪問日志(Nginx為例)日志格式&#xff1a; $remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" "$http_x_forwarded_for" 統計訪問IP次數&#xff1a; # awk…

arm linux 存儲,linux arm的存儲分布那些事

原標題&#xff1a;linux arm的存儲分布那些事linux arm 內存分布總覽上圖是linux的arm的虛擬地址分布總覽&#xff0c;我們按從低地址到高地址的順序逐個描述&#xff0c;每項的描述包括如下的內容的組和&#xff1a;地址范圍大小&#xff0c;虛擬轉物理的接口函數&#xff0c…

linux恢復終端默認配置,以gnome-terminal為例,修改gnome3 的默認配置,

以gnome-terminal為例&#xff0c;修改gnome3 的默認配置&#xff0c;gnome連續幾個版本的terminal默認配置文件都是同一個配置文件“b1dcc9dd-5262-4d8d-a863-c897e6d979b9”。這是因為gnome的developers編輯了這個配置文件并作為gnome-terminal的默認配置文件&#xff0c;用來…

c語言字符串文庫總結,C語言程序設計入門:字符串函數

版權聲明&#xff1a;以上文章中所選用的圖片及文字來源于網絡以及用戶投稿&#xff0c;由于未聯系到知識產權人或未發現有關知識產權的登記&#xff0c;如有知識產權人并不愿意我們使用&#xff0c;如果有侵權請立即聯系&#xff1a;55525090qq.com&#xff0c;我們立即下架或…

vs寫c語言能用scanf,【PAT編寫代碼時遇到的問題】vs中使用scanf(%c,x);

首先&#xff0c;為了在VS中使用scanf&#xff0c;可以在程序開頭加上#pragma warning(disable:4996)昨天在編寫程序的時候&#xff0c;突然發現在循環中使用scanf("%c",&x);的時候&#xff0c;發現結果很奇怪&#xff0c;只能讀入和輸出我所輸入的數據的一半。后…

大數計算器概念c語言,用C語言求兩個超大整數的和

用C語言求兩個超大整數的和在生活中&#xff0c;我們經常需要計算非常大的數&#xff0c;但是任何一種計算器都有計算范圍&#xff0c;一旦超過計算范圍就會有精度的損失。或許有同學認為我們可以通過程序來解決&#xff0c;比如對于C語言來說&#xff0c;我們定義一個long lon…

3 5的二維數組C語言程序,C語言及程序設計提高例程-33 二維數組元素的引用

賀老師教學鏈接 C語言及程序設計提高 本課講解輸入輸出二維數組元素#include int main(){int s[3][5], i, j;printf("Input 3*5 numbers\n");for (i0; i<3; i)for(j0; j<5; j)scanf("%d", &s[i][j]);for (i0; i<3; i){for(j0; j<5; j)pri…

android程序 幻燈片,Android:ViewPager制作幻燈片

public class MainActivity extendsActivity {//ViewPagerprivateViewPager viewpager;//幻燈片圖片資源private int [] imgArray{R.drawable.view1,R.drawable.view2,R.drawable.view3};//圖片數組private ArrayListviewlist;privateImageView imageView;//點點privateViewGro…

android獲取圖片方向并旋轉,Android 判斷imageview角度并旋轉

/*** 讀取照片exif信息中的旋轉角度** return角度 獲取從相冊中選中圖片的角度*/public static float readPictureDegree(String path) {int degree 0;try {ExifInterface exifInterface new ExifInterface(path);int orientation exifInterface.getAttributeInt(ExifInterf…

android鍵盤移動光標,在Android鍵盤上完成鍵

Jos Silva..12代替ic.sendKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_ENTER));嘗試ic.performEditorAction(EditorInfo.IME_ACTION_GO);執行的操作應該是在EditorInfo上定義的操作,它將在方法onStartInputView上傳遞給您要在操作之間切換,請使用:(sEditorI…

android 遠程桌面連接閃退,遠程桌面一點連接就閃退,不能彈出輸入賬號密碼窗口...

您好&#xff0c;感謝您在我們論壇發帖。首先&#xff0c;按照您的描述&#xff0c;正常情況下&#xff0c;您的客戶端可以遠程連接您的服務器&#xff0c;輸入IP和端口之后&#xff0c;會彈出驗證框&#xff0c;輸入賬戶密碼之后即可進入服務器的桌面。當出現問題時&#xff0…

com.sec.android.app.smartclipservice,EPR Aerospace News

The World Cup Ball And Its Astonishing Effects Can Be Easily Explained Through TheTheory Of Dynamic Interactions, Which Also Applies To The Flight Of The Boomerang.The official World Cup ball, the so called “Jabulani”, which has been object of a lot of c…

signature=5bcdc11c0d509d82e0d44c544cfad97b,江蘇省職稱計算機考試新職稱光盤試卷

試卷一1、世界上第一臺電子數字計算機采用的主要邏輯部件是(D)A光電管 B繼電器 C晶體管 D電子管2、世界上首次提出存儲程序計算機體系結構的是(D)A艾倫〃圖靈 B莫奇萊 C喬治〃布爾 D馮〃諾依曼3、計算機最主要的工作特點是(A)A存儲程序與自動控制 B高速度與高精度C可靠性與可用…

html表格內文字置頂,css如何讓table里的字居中?

css如何讓table里的字居中&#xff1f;下面本篇文章就來給大家介紹一下使用CSS讓table里字居中的方法。有一定的參考價值&#xff0c;有需要的朋友可以參考一下&#xff0c;希望對大家有所幫助。在CSS中&#xff0c;可以通過設置text-align: center;和vertical-align:middle;來…

你是怎么理解HTML語義化,HTML語義化標簽理解

1&#xff1a;語義化標簽是什么&#xff1f;語義化標簽&#xff0c;目的是讓標簽有自己的含義語義化非語義化如上代碼&#xff0c;p標簽含義就是段落&#xff0c;而span標簽毫無意義。2&#xff1a;語義化標簽好處方便用戶閱讀&#xff0c;頁面更加清晰。更好的SEO&#xff0c;…

html5離開網頁自動暫停,通過html5代碼在網頁中實現播放和暫停音樂mp3,mav等文

介紹通過html5代碼在網頁中實現播放和暫停音樂mp3,mav等文件的具體操作方法。這樣對于用戶來說&#xff0c;在線可播放功能能大大提高站內效率也可帶來一定的流量。希望對有需要的朋友有所幫助。這里我們需要先了解下&#xff0c;在html5中的兩個個重要標簽。阿里西西web開發網…