Protocol buffers protobuf common.h“;“没有此类文件”;

Protocol buffers protobuf common.h“;“没有此类文件”;,protocol-buffers,caffe,Protocol Buffers,Caffe,我正在尝试安装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/comm

我正在尝试安装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
我正在使用GoogleProtocolBuffer2.6.1(),我确实已经将目录添加到了路径中。common.h文件肯定在目录中(我亲眼看到),但不知怎的,它无法检测到它。我不知道该怎么办,所有的解决方案似乎都不适合我

如有任何见解,将不胜感激。我怀疑我忽略了某个步骤,因为我对Linux相当陌生


非常感谢。

PATH
告诉shell在哪里搜索命令。它不会告诉编译器在哪里搜索头。要让编译器在特定目录中查找标题,需要使用
-I
标志。例如:

g++ -I/path/to/protobuf/include -c my-source.cc
您需要说服构建系统将此标志添加到编译器命令行。所有合理的构建系统都有这样做的方法,但细节各不相同。对于autoconf,您可以在运行配置时指定:

./configure CXXFLAGS=-I/path/to/protobuf/include
对于cmake,我认为您可以这样做(未经测试):

或者,如果您将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

这并没有回答OP的问题。proto3的默认安装中根本不存在存根。@PKivolowitz Eh?google/protobuf/stubs/common.h肯定仍然存在并已安装:(而且OP明确表示他们使用的是2.6.1。)
sudo apt-get install libprotobuf-dev protobuf-compiler