protobufはどのようにprotoファイルでC++コードファイルとリンクprotobuf静的ライブラリの問題をエクスポートします

1848 ワード

[一].使い方protoファイルエクスポートC++コード
前にprotobufを編集して、待ちきれないほど小さなプログラムを書いてみました.
protobufコンパイルインストールが完了すると、コマンドラインの下にあるディレクトリにコマンドを入力できます.
protoc proto     --cpp_out=C++        

使用中に注意しなければならないことに気づいたのは--cpp_outのディレクトリはprotoファイルのパスに基づいています.つまり、protoファイルがsrcディレクトリの下にあると仮定し、C++コードもsrcディレクトリの下にエクスポートしたいとしたら、--cpp_out直接=.それでいいです.src/をもう一度書く必要はありません.src/を書いた場合、コードがエクスポートされたディレクトリはsrc/src/(src/srcが存在しなくても作成されます)になります.
注意:
1.protoファイルパスにはファイル名が必要です.--cpp_outパスにはファイル名は使用できません.パスのみです.
例えば、.proto現在のディレクトリの下で、C++コードも現在のディレクトリの下に生成するには、以下のようにprotocを呼び出すべきです.
protoc xxxx.proto --cpp_out=.

2.cdをprotoファイルがあるディレクトリにエクスポートしたほうがいいです.そうしないと、生成されたファイルがヘッダファイルに見つからないという問題が発生します.
protobufがC++コードを生成すると、同じディレクトリの下に2つのファイルが生成する.cc 1個h,生成する.cppファイルはincludeで生成されます.hファイルは、protoファイルが存在するディレクトリにcdを操作しないと現れる可能性がある.ccファイルには.hファイル時パスエラー
例:protoファイルはsrcディレクトリの下にあり、エクスポートコードもsrcディレクトリの下にエクスポートされ、次のコマンドを実行することができます.
protoc src/xxxx.proto --cpp_out=.
案の定、srcディレクトリの下で確かに生成された.cc和hファイルですが、コンパイルすると、エラーが発生します.
なぜなら、ヘッダファイル「src/xxxx.pb.h」が見つからないため、protobufはコマンド実行時にprotoファイルが存在するディレクトリのパスを生成したコードに追加したからです.
この問題を回避するには、cdをprotobufのあるディレクトリに移動して操作します.例えば前例の解決策は
cd src
protoc xxxx.proto --cpp_out=.

これで、再コンパイルしても、何の問題もありません.
【二】.protobufの静的ライブラリをリンクする
Protocで生成されたコードヘッダファイルとコードファイルのみをプロジェクトに組み込むと、リンク段階でエラーが報告され、エラー内容はほぼ未定義のメソッドXXXXXクラウドであり、一見protobufを含む静的ライブラリはないが、protobufのディレクトリの下で半日探しても静的ライブラリが生成されている場所が見つからなかった.
後でふと前の記事でprotobufはlibを/usr/local/libにインストールしたと述べたが、このディレクトリはデフォルトのディレクトリの1つ(OSやバージョンに依存するとは限らない)を含むはずなので、リンクパスを設定する必要はなく、Makefile/CMakeListsに直接txtでリンクライブラリ「protobuf」をコンパイルできます.問題が依然として残っている場合は、/usr/local/libがデフォルトの組み込み環境に組み込まれていない可能性があります.解決策はこの記事でも述べています.