protobuf common.h "No such file"

8

我正在尝试安装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个回答

14

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/usr/local/include/google/protobuf中)。

同时请注意,几乎所有的Linux发行版都有Protobuf软件包,您应该使用它而不是从源代码安装Protobuf。你需要安装-dev-devel软件包才能获取头文件。在Debian / Ubuntu上:

sudo apt-get install libprotobuf-dev protobuf-compiler

这并没有回答楼主的问题。在proto3的默认安装中,stubs根本不存在。 - PKivolowitz
@PKivolowitz 嗯?google/protobuf/stubs/common.h肯定还在并已安装:https://github.com/google/protobuf/blob/master/src/Makefile.am#L85(而且,无论如何,原帖明确说明他们正在使用2.6.1。) - Kenton Varda

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接