2012-04-09 93 views
1

我是對Linux和終端沒有經驗,但我正在努力學習。我以前從未包含過外部庫。現在,我需要將Boost.Asio庫包含在使用G ++在Ubuntu中開發的程序中。如何在C++應用程序中包含boost庫?

有人能夠非常認真和非常仔細地解釋如何從一開始就去解決這個問題嗎?

編輯:

擴大對原來的問題:如果我需要這個代碼發送給別人爲他們一個完全獨立的機器上運行,但在同樣的環境下,我怎麼考慮到這一點?如果這整個過程涉及將庫文件字面地放到與代碼相同的文件夾中,那麼我只是將這些庫文件與.cpp一起發送給這個其他人嗎?

+0

什麼IDE /編譯器的GNU autoconf的名單上記錄了一個?這有點依賴於這些東西。 – 2012-04-10 00:37:03

+1

我想我提到了G ++?是啊,我做了。好吧,我並不瘋狂。 – Aerovistae 2012-04-10 00:39:10

+0

是的,你的確提到過編譯器,但IDE /編輯器呢?你如何運行編譯器? (和+1,很好的問題!) – Mehrdad 2012-04-10 00:42:05

回答

0

我不知道你的具體IDE,或約Boost.Asio的明確,但一般:

每當你需要鏈接到圖書館,有一個名爲類似lib???.a文件,你需要。您需要將-l???標誌傳遞給g++以鏈接到該文件。

(我不是太熟悉的細節自己,所以有可能是其他的文件格式和諸如此類的東西太...)


關於編輯:

「正確」的方式只是讓他們自己下載庫,然後將-l???傳遞給它們的鏈接器。在你的源代碼中加入Boost會使它變成巨大的,沒有什麼理由......它不像你在你的代碼中包含STL。

+0

您的方向肯定是正確的,但我希望得到更具體的答案 - 我甚至不知道如何處理可從Boost網站下載的.tar.gz文件。我真的不知道這種事情在Linux中是如何工作的。直到現在,我已經完成了我在Windows上的Visual Studio中的所有工作,即使如此,我從未使用過外部庫。 – Aerovistae 2012-04-10 00:49:45

+0

@Aerovistae:啊...是的,我不確定什麼是「正確」的方式來做到這一點。就我個人而言,我只是將Boost解壓縮到某個全局文件夾(即獨立於項目的某個文件夾,可能只是在'〜/ boost'?),然後傳遞-L/home/your-name/boost/path-to-lib -folder「作爲選項,告訴GCC將該路徑包含在庫搜索路徑中。也許別人可以更好地回答。 – Mehrdad 2012-04-10 00:53:55

1

你已經提到你使用的是Ubuntu,所以使用boost最簡單的方法是首先安裝libboost-all-dev包(來自synaptic),它將爲你安裝所有東西,包括那些需要編譯的東西。那麼你只需要以通常的方式使用g++

請注意,無論您想要的版本是什麼,如果不是,您可能需要自己安裝。在另一方面,升壓大多頭僅庫,所以你只需要到文件(右鍵單擊在Ubuntu ...)到文件夾和鏈接提取到它,而編譯:

g++ hello_world.cpp -I boost_1_49_0/boost 

其中最後一個指定編譯器的路徑以查找提升標題(請使用絕對路徑)。

如果你想發送你的程序給別人,不要複製只有一些boost文件,它不工作,因爲依賴。要求他們安裝與您相同的環境,而且很容易(只需解壓文件...)。

0

您不包含庫,而是聲明對它的依賴關係。例如。考慮你使用autoconfautomake然後你會添加AX_BOOST_BASE 需要增強和AX_BOOST_ASIO需要ASIO庫。在您的Makefile.am文件中,您使用BOOST_CPPFLAGSBOOST_LDFLAGS宏,並依靠./configure正確設置它們。然後,誰使用你的代碼將不得不運行衆所周知的./configure腳本,它將分析升級位置的環境並在構建環境中設置適當的值,以便make成功。

至少這是理論。在實踐中,有一個原因,整個事情更好地被稱爲autohell。替代品存在,如CMake或助力自己的bjam。但是大綱總是一樣的:你在你的構建配置中聲明瞭依賴關係,並且消耗你產品的目標位置必須滿足需求(意味着它必須下載/安裝所需的boost版本,在你的情況下)。否則,你進入分發二進制文件的業務,由於平臺/體系結構/分佈的豐富性,你的應用程序將被部署在其中。問題

顯然,如果你使用不同的構建系統,如ANT,那麼您應該參考構建系統文檔以瞭解如何聲明升級需求。

1:ax_boost.m4不是唯一的升壓檢測M4庫,還有其他在那裏,但宏

相關問題