web-dev-qa-db-ja.com

protobufcommon.h「そのようなファイルはありません」

Caffeをインストールしようとしていますが、この苛立たしいエラーが発生しています。 makeを実行すると、次のようになります。

CXX .build_release/src/caffe/proto/caffe.pb.cc
In file included from .build_release/src/caffe/proto/caffe.pb.cc:5:0:
.build_release/src/caffe/proto/caffe.pb.h:9:42: fatal error: google/protobuf/stubs/common.h: No such file or directory
compilation terminated.
make: *** [.build_release/src/caffe/proto/caffe.pb.o] Error 1

Googleプロトコルバッファ2.6.1( https://developers.google.com/protocol-buffers/docs/downloads )を使用しており、実際にディレクトリをPATHに追加しました。 common.hファイルは間違いなくディレクトリにありますが(私は自分の目で見ています)、どういうわけかそれを検出できません。私には何をすべきかわからない、そして この問題 からのすべての解決策は私のためにうまくいかないようだ。

任意の洞察をいただければ幸いです。私はLinuxにかなり慣れていないので、どこかで一歩を怠っていると思います。

どうもありがとうございました。

6
sim

PATHは、コマンドを検索する場所をシェルに指示します。ヘッダーを検索する場所をコンパイラーに指示しません。特定のディレクトリでヘッダーを検索するようにコンパイラに指示するには、-Iフラグを使用する必要があります。例えば:

g++ -I/path/to/protobuf/include -c my-source.cc

このフラグをコンパイラのコマンドラインに追加するようにビルドシステムを説得する必要があります。すべての合理的なビルドシステムにはこれを行う方法がありますが、詳細は異なります。 autoconfの場合、configureを実行するときに指定できます。

./configure CXXFLAGS=-I/path/to/protobuf/include

Cmakeの場合、次のようなことができると思います(テストされていません):

cmake -DCMAKE_CXX_FLAGS=-I/path/to/protobuf/include

または、protobufを標準の場所(/usrまたは/usr/local)にインストールした場合(したがって、ヘッダーを/usr/include/google/protobufまたは/usr/local/include/google/protobufに配置)、この問題はおそらく発生しません。

また、ほとんどすべてのLinuxディストリビューションにはProtobufパッケージがあり、ソースコードからProtobufをインストールするのではなく、おそらくそれを使用する必要があることに注意してください。ヘッダーを取得するには、-devまたは-develパッケージが必要です。 Debian/Ubuntuの場合:

Sudo apt-get install libprotobuf-dev protobuf-compiler
11
Kenton Varda