2016-04-30 67 views
1

我正在嘗試使用Boost的cpp-netlib編寫一個超級小程序來解析示例C++文件中的HTTP URL。如何在我的C++代碼中包含boost項目

的代碼是微不足道的:

#include <boost/network/uri> 
#include <iostream> 

using namespace boost::network; 

int main() { 
    uri::uri instance("http://www.example.com"); 
    std::cout << "scheme: " << instance.scheme() << std::endl 
     << "host: " << instance.host() << std::endl; 

    return 0; 
} 

我的測試代碼是在同一目錄下,升壓源。要編譯我簡單地做:

g++ -Icpp-netlib-0.12.0-final -o test test.cpp

它沒有找到包括與-I雖然過去了,我得到一個致命的錯誤。

fatal error: 'boost/network/uri' file not found 
#include <boost/network/uri> 
     ^
1 error generated. 

什麼是正確的方法來做到這一點,開始使用他們的庫編寫示例代碼?

+0

我不知道增強多少,但你確定你應該使用boost/network/uri而不是'boost/network/uri.hpp'嗎? – MikeCAT

+0

這給了我一個新的錯誤。致命錯誤:'#include '我在'boost/network/uri /'中看到了'config.hpp',但是在目錄中沒有看到'boost/config.hpp'。 – randombits

+0

我認爲你的提升安裝被破壞了。也許你沒有安裝開發包? – drescherjm

回答

2

從這個猜測:

My test code is in the same directory as where the boost source is.

如果你有什麼是你解包boost頭文件到你的源代碼目錄,那麼你的包含語句不會工作。 #include <>僅搜索標準包含路徑中的包含文件(/ usr/include &等等)。

所以,你可以嘗試包括語句「」來代替,這將從目前的源目錄搜索過,或者更好的是,使用包管理器在你的發行版安裝官方推動開發包,您的計算機。

如果在源代碼中有目錄「cpp-netlib-0.12.0-final/boost」,編譯器命令行參數「-Ipp-netlib-0.12.0-final」將幫助編譯器找到boost你啓動g ++的目錄。

1
  1. 關於您的Boost安裝,您是否正確安裝並鏈接了Boost.date_time?大部分Boost只有標題;這裏,Boost.systemBoost.Regex,並且不需要單獨的二進制。但是,Boost.Date_time具有單獨的二進制庫,並且需要使用其他安裝步驟。 [參考文獻2]

    Although Boost is mostly header only, applications built using cpp-netlib still requires linking with Boost.System, Boost.Date_time, and Boost.Regex. [Ref 1]

  2. 是您的Boost庫上面的1.50.0版本?

  3. 你設置你的BOOST_ROOT環境變量?

The path to the boost root directory (often /usr/local/boost_1_60_0) is sometimes referred to as $BOOST_ROOT in documentation and mailing lists [Ref 2]

  • 就是boost安裝在/usr/local?您可能需要root訪問權限才能執行此操作。

  • 您是否檢查了安裝的權限?如果你作爲root安裝,您可能需要chmod 755權限到非root帳戶

  • 參考文獻:
    1. http://cpp-netlib.org/0.12.0/getting_started.html#getting-started
    2。http://www.boost.org/doc/libs/1_60_0/more/getting_started/unix-variants.html

    希望這會有所幫助。