web-dev-qa-db-ja.com

c ++ブーストライブラリの問題:-lboost_system ldが1つの終了ステータスを返しませんでした

ブーストに問題があります。次のコマンドでブーストをインストールした後

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.

解決方法は?

1
Zhao Hao

ヘッダーファイルとライブラリの違いを理解してください。

ヘッダーファイル(/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の機能を使用していないという理由だけで機能しました。ブーストクラス/関数を使用する場合、適切なヘッダーが含まれていないと、コンパイルエラーが発生します。

3
sмurf