我在系统上安装了protoc,protoc-c,libprotobuf和libprotobuf-c。我有.proto文件,该文件导入timestamp.proto如下:
syntax = "proto3";
import "google/protobuf/timestamp.proto";
message DeviceCtx {
google.protobuf.Timestamp CID = 1;
uint32 ContextLen = 2;
bytes ContextBuf = 3;
}
Am使用protoc-c使用以下命令为其生成C绑定:
home>protoc-c --c_out=. a.proto
home>ls a.pb-c*
a.pb-c.c a.pb-c.h
它为此原型文件生成C绑定。但是,当我尝试编译此.c文件时,由于正在寻找timestamp.pb-c.h文件,因此出现以下错误。
home>gcc a.pb-c.c dummy.c -I/usr/local/include -L/usr/local/lib -lprotobuf-c
In file included from a.pb-c.c:9:0:
a.pb-c.h:17:10: fatal error: google/protobuf/timestamp.pb-c.h: No such file or directory
#include "google/protobuf/timestamp.pb-c.h"
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
使用protoc-c时,我没有看到标准proto的头文件,例如在安装protoc-c时生成/暂存的timestamp.proto之类的文件。这是否意味着我们必须使用protoc-c显式重新编译google / protobuf下的所有proto,以生成所有protos(google / protobuf / *。protos)的C绑定,将生成的头文件放在/ usr / local / include下/ google / protobuf并在我们的库中包含* pb-cc文件可以使其成功构建?我是否需要安装任何特定的软件包才能在google / protobuf下获取protos的C绑定。我是否在安装过程中错过了一些步骤,该步骤会为google / protobuf下的所有原型自动生成C绑定,并正确上载它。
如果我不从google / protobuf导入任何原型,我看不到任何问题。
当对同一proto文件使用protoc时,我看不到任何此类问题。
home>protoc --cpp_out=. a.proto
home>g++ a.pb.cc dummy.cc -I/usr/local/include -L/usr/local/lib -lprotobuf
home>
我是protobuf的新手,并且是第一次使用protoc-c编译器。因此,对我的缺点表示歉意。
谢谢, -迷你
答案 0 :(得分:0)
通常,在第三方Protobuf库中,您将Google的.proto
文件与自己编写的任何.proto
对待一样。因此,您将编写规则以将其编译到特定于项目的include目录中的文件夹中。