我正在尝试安装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很陌生。
非常感谢。
答案 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