CocoaAsyncSocketネットワーク通信で使用するProtobufインストール(五)


CocoaAsyncSocketネットワーク通信で使用するProtobufインストール(五)
Protocol BuffersはGoogleが発売したツールで、主にデータのシーケンス化と逆シーケンス化を処理し、データの異なるタイプに対して圧縮ストレージを行うことができ、ネットワークデータ伝送のサイズを減らすことができます.
一般的に、私たちはデータプロトコルを書くときに、異なるプラットフォームに対して複数回のデータ解析方法を実現する必要がありますが、Protocol Buffersのもう一つの機能は、1回のテンプレートカスタマイズ、マルチプラットフォームコンパイルで使用することです.
Protocol Buffersはc+、java、pythonをオリジナルでサポートしており、ios上でc++版のミキシングコードを使用することができますが、コンパイルプロセスが面倒で、iosではサードパーティのライブラリ(ocバージョン)を使用します.
ソースアドレス:https://github.com/alexeyxo/protobuf-objc
Protocol Buffersのインストール
1.まず自分のmacにHomebrewがインストールされているかどうかをチェックします.使用コマンド:brew-v
zhuruhongdeMacBook-Pro:ios zhuruhong$ brew -v
Homebrew 0.9.5 (git revision 30c54; last commit 2016-02-16)

2.まだインストールされていない場合は、次のコマンドを使用してインストールしてください.
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

3.Homebrewをインストールしたら、次に必要なツールをインストールします.次のコマンドを実行します.
brew install automake
brew install libtool
brew install protobuf

注意:protobufをインストールしたことがありますが、次のエラーが発生しました.not linkedを教えてください.処理手順は次のとおりです.
zhuruhongdeMacBook-Pro:protobuf-objc zhuruhong$ brew install protobuf
Warning: protobuf-2.6.1 already installed, it's just not linked
zhuruhongdeMacBook-Pro:protobuf-objc zhuruhong$ 
zhuruhongdeMacBook-Pro:protobuf-objc zhuruhong$ brew link protobuf
Linking /usr/local/Cellar/protobuf/2.6.1... 
Error: Could not symlink include/google/protobuf/compiler/code_generator.h
Target /usr/local/include/google/protobuf/compiler/code_generator.h
already exists. You may want to remove it:
  rm '/usr/local/include/google/protobuf/compiler/code_generator.h'

To force the link and overwrite all conflicting files:
  brew link --overwrite protobuf

To list all files that would be deleted:
  brew link --overwrite --dry-run protobuf
zhuruhongdeMacBook-Pro:protobuf-objc zhuruhong$ 
zhuruhongdeMacBook-Pro:protobuf-objc zhuruhong$ brew link --overwrite protobuf
Linking /usr/local/Cellar/protobuf/2.6.1... 70 symlinks created
zhuruhongdeMacBook-Pro:protobuf-objc zhuruhong$ 

brew link--overwrite protobufコマンドが失敗する可能性があります.対応するprotocolディレクトリのファイル権限を上書きする権限はありません.1つずつ変更してから、コマンドを再試行してください.
4.任意のディレクトリでprotocコマンドを使用できるように、protocにショートカットリンクを作成します.もちろんこれはオプションで、環境変数を自分で構成しても同じ効果が得られます.リンクコマンドは次のとおりです.
ln -s /usr/local/Cellar/protobuf/2.6.1/bin/protoc /usr/local/bin

5.次にgitからprotobufのocバージョンプロジェクトを引き出し、ディレクトリを自分の好みで保存します.コマンドは次のとおりです.
git clone https://github.com/alexeyxo/protobuf-objc.git

6.引き出したばかりのprotobuf-objcプロジェクトをコンパイルし、protobuf-objcプロジェクトディレクトリに入り、次のコマンドを順次実行する
./autogen.sh
make
make install

注:手順3のインストールとリンクに失敗した場合、手順6では成功しない可能性があります.私は次のような間違いに遭遇して、何度も研究した後、ついに原因が第3歩の未linkedによるものであることを発見しました.
./google/protobuf/descriptor.pb.h:2840:50: error: no member named 'GetEmptyStringAlreadyInited' in namespace 'google::protobuf::internal'
  if (package_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
                   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
./google/protobuf/descriptor.pb.h:2848:50: error: no member named 'GetEmptyStringAlreadyInited' in namespace 'google::protobuf::internal'
  if (package_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
                   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
./google/protobuf/descriptor.pb.h:2856:50: error: no member named 'GetEmptyStringAlreadyInited' in namespace 'google::protobuf::internal'
  if (package_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
                   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
./google/protobuf/descriptor.pb.h:2864:50: error: no member named 'GetEmptyStringAlreadyInited' in namespace 'google::protobuf::internal'
  if (package_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
                   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
./google/protobuf/descriptor.pb.h:2872:50: error: no member named 'GetEmptyStringAlreadyInited' in namespace 'google::protobuf::internal'
  if (package_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) {
                   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
./google/protobuf/descriptor.pb.h:2876:75: error: no member named 'GetEmptyStringAlreadyInited' in namespace 'google::protobuf::internal'
    package_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
                                            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
fatal error: too many errors emitted, stopping now [-ferror-limit=]
20 errors generated.

7.作成protoファイル、すなわちデータ構造の記述ファイルは、ここではあまり言わず、直接ファイルの内容をテストする.
message Person {
    required int32 id = 1;
    required string name = 2;
    optional string email = 3;
}

8.protocコマンドで.protoファイルはobject-cコードにコンパイルされます.
protoc --objc_out=./ Person.proto    //oc  ,        
protoc --cpp_out=./ *.proto            //c++  
proton —java_out=./ *.proto          //java  

9.protobufのiosでの使用.
 Podfile  oc   protocol buffers    :
pod 'ProtocolBuffers', '~> 1.9.9.2’

10.Personオブジェクトの使用
Personを導入するpb.h,Person.pb.mファイル、コンパイル運転工程
demo:https://github.com/zhu410289616/RHSocketKit
サービス側エンジニアリングdemo:RHSocketServerDemo
顧客度エンジニアリングdemo:RHSocketKitDemo
email: [email protected]
qq: 410289616
qq群:3305855393
2016.2.25