2017-06-08 23 views
1

GFLAGSを内部に持つファイルをコンパイルしようとしています。 私のコンパイルコマンド:Gflagsコンパイル時エラー

g++ -I ../eigen-eigen-b9cd8366d4e8/ -I/caffe_path/distribute/include my_file.cpp -std=c++0x -lpthread -lglog -lboost_system -DUSE_OPENCV 

私のエラーメッセージは次のとおりです。

/usr/bin/ld: /tmp/ccv5GAaZ.o: undefined reference to symbol '_ZN6google26ShowUsageWithFlagsRestrictEPKcS1_' 
//usr/lib/x86_64-linux-gnu/libgflags.so.2: error adding symbols: DSO missing from command line 

それはGFLAGSでの作業私の最初の時間です。インターネット上の提案に基づいて、私は#ifndef#endifという行をコメントしようとしましたが、それは助けになりませんでした。

#ifndef GFLAGS_GFLAGS_H_ 
    namespace gflags = google; 
#endif 

私もこのthreadに関する提案を試みましたが、何も修正されませんでした。

+1

このタイプのエラーが発生したとき、ロードしていたライブラリのバージョンが不一致であることが判明しました。 LDD_LIBRARY_PATHを調べて、各モジュールの正しいバージョンを取得していることを確認してください。また、いくつかの便利なオブジェクトで 'ldd'を試してみることもできます。全体的な環境で矛盾がないかチェックして、適切な* vars.shファイルをソース化していることを確認してください。 – Prune

+0

OS(Ubuntu 16.04)をダウンロードし、最近すべてのライブラリをインストールします。だから私は、古いライブラリに関するいくつかの矛盾があると思います。あなたが言ったように、何らかの他の理由のためにまだ矛盾があるかもしれません。 LDD_LIBRARY_PATHと適切な* vars.shファイルの意味 – MIRMIX

+1

私は余分な 'D'を入れました。 'LD_LIBRARY_PATH'でなければなりません。これは標準的な環境変数であり、ライブラリの負荷設定を制御します。ツールの中には、$ _HOME/binディレクトリに ' vars.sh'という名前のスクリプトがあります。それらのツールでは、パス変数を適切に設定するためにファイルをソースする必要があります(またはビルドスクリプト)。たとえば、MKL(IntelのMath Kernel Library)には、1つがあります。 – Prune

答えて

1

gflagsはcaffeの内部にインストールされ、別の方法で競合を引き起こしていました。それらのいずれかをアンインストールしても役に立たなかった。私のための解決策は、ubuntuシステム全体の再インストール(すべて)であり、caffeは再びこの問題を解決しました。私はフォーラムやスレッドで何日も検索しましたが、この問題に関するより良い解決策は見つかりませんでした。だから、gflagsとcaffeをアンインストールするだけでは役に立ちませんでした。私のソリューションは、ubuntu全体を再インストールしていました。

関連する問題