当前位置: 首页 > 工具软件 > lite-proto > 使用案例 >

protobuf - Compile Proto File

隆康平
2023-12-01

proto文件

下面是一个简单的proto文件。

/*
protoc -I=. --cpp_out=. helloworld.proto 
*/

message helloworld 
{ 
    required int32     id = 1;  // ID 
    required string    str = 2;  // str 
    optional int32     opt = 3;  //optional field 
}

compile proto file

$ protoc -I=. --cpp_out=. helloworld.proto
protoc: error while loading shared libraries: libprotoc.so.14: cannot open shared object file: No such file or directory
$

libprotoc.so

lib.protoc.so安装在/usr/local/lib目录,而该目录没有加到LD_LIBRARY_PATH中。解决主要步骤:

  • 在/etc/ld.so.conf.d/目录下创建一个conf文件;
  • 在该文件中增加一行: /usr/local/lib
  • sudo ldconfig

过程如下:

$ protoc -I=. --cpp_out=. helloworld.proto
protoc: error while loading shared libraries: libprotoc.so.14: cannot open shared object file: No such file or directory
$ ls /usr/local/lib/
libpcre.a                   libpcreposix.a              libpcre.so.1.2.3            libprotobuf-lite.so.14.0.0  libprotoc.so.14
libpcrecpp.a                libpcreposix.la             libprotobuf.a               libprotobuf.so              libprotoc.so.14.0.0
libpcrecpp.la               libpcreposix.so             libprotobuf.la              libprotobuf.so.14           pkgconfig/
libpcrecpp.so               libpcreposix.so.0           libprotobuf-lite.a          libprotobuf.so.14.0.0       python2.7/
libpcrecpp.so.0             libpcreposix.so.0.0.2       libprotobuf-lite.la         libprotoc.a                 python3.5/
libpcrecpp.so.0.0.0         libpcre.so                  libprotobuf-lite.so         libprotoc.la
libpcre.la                  libpcre.so.1                libprotobuf-lite.so.14      libprotoc.so
$ cat /etc/ld.so.conf
include /etc/ld.so.conf.d/*.conf

$ ls /etc/ld.so.conf.d/
fakeroot-i386-linux-gnu.conf  i386-linux-gnu.conf  i386-linux-gnu_EGL.conf  i386-linux-gnu_GL.conf  libc.conf
$ sudo vi /etc/ld.so.conf.d/protobuf.conf
[sudo] password for flying-bird: 
$ cat /etc/ld.so.conf.d/protobuf.conf 
/usr/local/lib
$ protoc -I=. --cpp_out=. helloworld.proto
protoc: error while loading shared libraries: libprotoc.so.14: cannot open shared object file: No such file or directory
$ sudo ldconfig
$ protoc -I=. --cpp_out=. helloworld.proto
[libprotobuf WARNING google/protobuf/compiler/parser.cc:546] No syntax specified for the proto file: helloworld.proto. Please use 'syntax = "proto2";' or 'syntax = "proto3";' to specify a syntax version. (Defaulted to proto2 syntax.)
$ 

syntax

可以在proto文件开头添加一行,说明语法版本。

/*
protoc -I=. --cpp_out=. helloworld.proto 
*/

syntax = "proto2";

message helloworld 
{ 
    required int32     id = 1;  // ID 
    required string    str = 2;  // str 
    optional int32     opt = 3;  //optional field 
}

重新编译:

$ protoc -I=. --cpp_out=. helloworld.proto
$ ls -l
total 40
-rw-rw-r-- 1 flying-bird flying-bird 20490 8月   7 23:14 helloworld.pb.cc
-rw-rw-r-- 1 flying-bird flying-bird 10651 8月   7 23:14 helloworld.pb.h
-rw-rw-r-- 1 flying-bird flying-bird   225 8月   7 23:14 helloworld.proto
$ 

这里是将proto文件生成对应的C++代码。下面的命令是生成Python代码:

$ protoc -I=. --python_out=. helloworld.proto
$ ls -l
total 44
-rw-rw-r-- 1 flying-bird flying-bird  2502 8月   7 23:16 helloworld_pb2.py
-rw-rw-r-- 1 flying-bird flying-bird 20490 8月   7 23:14 helloworld.pb.cc
-rw-rw-r-- 1 flying-bird flying-bird 10651 8月   7 23:14 helloworld.pb.h
-rw-rw-r-- 1 flying-bird flying-bird   225 8月   7 23:14 helloworld.proto
$ 

可以用protoc –help了解更多信息。

 类似资料: