【问题标题】:protobuf common.h "No such file"protobuf common.h "没有这样的文件"
【发布时间】:2015-08-17 11:24:42
【问题描述】:

我正在尝试安装 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 还很陌生。

非常感谢。

【问题讨论】:

    标签: protocol-buffers caffe


    【解决方案1】:

    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
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-14
    • 1970-01-01
    • 2020-08-03
    • 1970-01-01
    • 2013-02-17
    • 1970-01-01
    • 2017-10-01
    相关资源
    最近更新 更多