protobuf common.h"没有这样的文件"

时间:2015-08-16 20:22:16

标签: 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/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文件肯定在目录中(我亲眼看到它),但不知何故它无法检测到它。我不知道该怎么做,this issue的所有解决方案似乎都不适合我。

任何见解都将受到赞赏。我怀疑我在某个地方忽略了一个步骤,因为我对Linux很陌生。

非常感谢。

1 个答案:

答案 0 :(得分:11)

PATH告诉你的shell在哪里搜索命令。它不会告诉编译器在哪里搜索标头。要告诉编译器在特定目录中查找标头,您需要使用-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或{{1}中),您可能不会遇到此问题})。

另请注意,几乎所有Linux发行版都有一个Protobuf包,您应该使用它而不是从源代码安装Protobuf。您需要/usr/local/include/google/protobuf-dev包才能获得标头。在Debian / Ubuntu上:

-devel