2018/03/03

[c/c++]protobuf-c (1)

重い腰を上げ、protobufのことを調べることにした。


https://github.com/protobuf-c/protobuf-c

protobuf-c-rpcというものもあるようだが、今回はprotobuf-cのみ見ていこう。


説明を読むと、`.proto` ファイルをコンパイルするツールのように見える。
コンパイルすると、 `.pb-c.c` と `.pb-c.h` が生成されて、それをincludeするなどして使うとよいのだろう。


まずは素直にビルドさせ・・・させてくれない。
`protobuf` が無いって言われるけど、それをビルドするんじゃ無いの???
いや、確かに手順として protobuf がいるとは書かれていたのだが、知識無しで進めるのは危険そうなので、protobufそのもののことを調べておこう。


https://developers.google.com/protocol-buffers/

Protocol buffers are Google's language-neutral, platform-neutral, extensible mechanism for serializing structured data

らしい。
コンパイラとか何とかじゃなくて、メカニズムなのか。

XMLを意識しているようだが、まあそこはいいだろう。
JSONとかXMLのようなテキスト形式は、私にとっても扱いにくいので、バイナリでシリアライズしてくれるというのは大切だ。

.protoファイルに、データ型やメンバを記載していくようだ。
数字が出てきているが、Cでいうところのenum値みたいなものだろうか。
たぶん、この例の `message Person` が構造体みたいなもので、その構造体で使うものは、型を含めてこの中で定義するのだろう。
型はenum、構造体はmessage、かな。

まあ、推測で書いていくと、後で間違っていたときに書き直すのが面倒だから、ここまでにしておこう。


protoのバージョンは2と3があるらしい。
今はproto3が最新のようだから、そちらだけ見よう。
・・・量が多いので、やめた。


protocだけあればいいかと思ったのだが、そう簡単では無いらしい。
pkg-configでprotobufが無いと言われる。
CLAGSみたいなものを定義してもよいらしいが、C++版のインストールがいるのだろうか?


なんとなく分かったが、protobuf-cのprotoc-cは、protocのプラグインとして動作してCソースを生成するもののようだ。
そしてprotobuf-cがそれを使うためのライブラリ、ということか。

ならば、libprotobuf-devをapt installすればよいのか。。。だめだ、includeファイルが見つからないらしい。

checking google/protobuf/compiler/command_line_interface.h usability... no
checking google/protobuf/compiler/command_line_interface.h presence... no
checking for google/protobuf/compiler/command_line_interface.h... no
configure: error: required protobuf header file not found

むう、apt installでは足りんのか。。。

0 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。