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

sim*_*sim 6 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
Run Code Online (Sandbox Code Playgroud)

我正在使用Google协议缓冲区2.6.1(https://developers.google.com/protocol-buffers/docs/downloads),我确实已将该目录添加到PATH.common.h文件肯定在目录中(我亲眼看到它),但不知何故它无法检测到它.我不知道该怎么做,这个问题的所有解决方案似乎都不适合我.

任何见解将不胜感激.我怀疑我在某处忽略了一步,因为我对Linux很陌生.

非常感谢你.

Ken*_*rda 11

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

g++ -I/path/to/protobuf/include -c my-source.cc
Run Code Online (Sandbox Code Playgroud)

您需要说服构建系统将此标志添加到编译器命令行.所有合理的构建系统都有一些方法可以做到这一点,但细节有所不同.对于autoconf,您可以指定何时运行configure:

./configure CXXFLAGS=-I/path/to/protobuf/include
Run Code Online (Sandbox Code Playgroud)

对于cmake,我认为你可以做这样的事情(未经测试):

cmake -DCMAKE_CXX_FLAGS=-I/path/to/protobuf/include
Run Code Online (Sandbox Code Playgroud)

或者,如果您将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
Run Code Online (Sandbox Code Playgroud)