ブーストに問題があります。次のコマンドでブーストをインストールした後
Sudo apt-get install python-dev
Sudo apt-get install libboost-python1.54
Sudo apt-get install libboost-system1.54 libboost-filesystem1.54
tar -zxf Boost-2014.10.tar.gz
cd ~/build-2014.10/
./bootstrap.sh
Sudo ./b2 install -j8 --prefix=/usr --libdir=/usr/lib --includedir=/usr/include --build-type=minimal variant=release --layout=tagged threading=single threading=multi
ブーストバージョンは1.57です。次に、サンプルを実行してテストします。のようなコード
#include <iostream>
using namespace std;
#include <boost/lexical_cast.hpp>
#include <boost/filesystem.hpp>
int main(){
cout<<"hello"<<endl;
int a=boost::lexical_cast<int>("123456");
cout<<"boost "<<a<<endl;
return 1;}
次に、コンパイルしますが、エラーが表示されます
g++ test -o test.cpp -lboost_system
/usr/bin/ld: cannot find -lboost_system
collect2: error: ld returned 1 exit status
行を削除した場合
#include <boost/filesystem.hpp>
そしてそれをコンパイルします
g++ test -o test.cpp it works.
解決方法は?
ヘッダーファイルとライブラリの違いを理解してください。
ヘッダーファイル(/usr/include/boost/filesystem.hppなど)は、#include
ディレクティブの一部としてソースコードで使用するものです。 C++プリプロセッサはそのファイルを読み取り、プログラムに多数の宣言を追加します。
ライブラリは、さまざまな関数、静的データ、その他のもののコンパイルされたコレクションです。パラメーター-lboost_system
を使用すると、コンパイラーに「プログラムをコンパイルしてライブラリーlibboost_systemとリンクする」ように指示します。
リンカは、そのライブラリを見つけることができないと文句を言います(/usr/bin/ld: cannot find -lboost_system
)。考えられる理由は、スクリプト./bootstrap.sh
が適切なディレクトリにブーストをインストールしなかったためです。
ここから、いくつかのオプションがあります。
Boost-2014.10.tar.gzに固執したいなら、あなたは自分でいます。
パッケージlibboost-dev
をインストールすることをお勧めします。システムの現在のバージョンのboostがインストールされ、すべてのファイルが適切な場所に配置されます。
そして最後に:ファイルから#include
行を削除したときは、プログラムがboost :: systemの機能を使用していないという理由だけで機能しました。ブーストクラス/関数を使用する場合、適切なヘッダーが含まれていないと、コンパイルエラーが発生します。