<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                [TOC] ### ProtoBuf下載 ***** github地址:[https://github.com/google/protobuf](https://github.com/google/protobuf) ### docker安裝ProtoBuf ***** Dockerfile文件: ``` FROM centos:7 RUN yum install -y net-tools \ libgomp.x86_64 \ libtool-ltdl-devel.x86_64 \ vim \ psmisc.x86_64 \ libuuid-devel.x86_64 \ zlib-devel.x86_64 \ unixODBC-devel.x86_64 \ mariadb-devel.x86_64 \ dos2unix \ cmake \ make \ gcc-4.8.5 \ gcc-c++-4.8.5 \ autoconf \ automake \ libtool \ git WORKDIR /home/project RUN git clone https://github.com/google/protobuf \ && cd protobuf \ && chmod +x -R ./* \ && ./autogen.sh && ./configure && make && make check && make install CMD /bin/bash ``` ### Linux/MacOs ***** ProtoBuf在linux上編譯 進入 ProtoBuf目錄 ``` $ cd protobuf ``` 執行`autogen.sh` 腳本,生成`configure`文件 ``` $ ./autogen.sh ``` 執行命令: ``` $ ./configure && make && make check && make install ``` ### windows平臺上 ***** ProtoBuf的編譯 ### `proto`文件在代碼中的使用 #### 在C++中的使用 編寫`.proto`定義文件 `message.proto`: ``` syntax = "proto2"; package tutorial; //在代碼中作為命名空間 message Person { required string name = 1; required int32 id = 2; // Unique ID number for this person. optional string email = 3; enum PhoneType { MOBILE = 0; HOME = 1; WORK = 2; } message PhoneNumber { required string number = 1; optional PhoneType type = 2 [default = HOME]; } repeated PhoneNumber phone = 4; } // Our address book file is just one of these. message AddressBook { repeated Person person = 1; } ``` `.proto`文件關鍵性地方分析: ``` syntax = "proto2"; 作為版本號 package tutorial; 在代碼中作為命名空間 message是定義消息的關鍵字,同比c++中的struct/class,message可以嵌套使用 限定符required表示該字段必須存在,否則對應的message“未初始化”,debug模式下導致斷言,release模式下解析失敗; 限定符optional表示該字段可選存在, 限定符repeated表示該字段為重復字段,可以看著動態數組 int32,string 為protobuf數據類型 文件注釋使用 // enum 為protobuf定義union類型屬性 ``` 編譯`.proto`文件 ``` proto --cpp_out=./ message.proto //注意 --cpp_out后有兩個參數./表示輸出目錄 message.proto表示要編譯的proto文件路徑 ``` 生成 `message.pb.h`跟`message.pb.cc`文件 c++中使用這兩個文件 ``` #include <iostream> #include "message.pb.h" #include <fstream> using namespace std; using namespace tutorial; int main() { // /*放置消息*/ // Person person; // person.set_name("zane"); // person.set_id(1234); // person.set_email("1001@qq.com"); // fstream output("file",ios::out | ios::binary); // person.SerializeToOstream(&output); /*讀取消息*/ Person readPerson; fstream input("file", ios::in | ios::binary); readPerson.ParseFromIstream(&input); std::cout << "Name:" << readPerson.name() << std::endl; std::cout << "E-Mail:" << readPerson.email() << std::endl; return 0; } ``` 文件目錄 ``` |— TestProtoBuf |— bin |— inc |- message.pb.h |— src |- main.cpp |- message.pb.cc |— protoc |— message.proto |— CMakeLists.txt ``` CMakeLists.txt編寫 ``` cmake_minimum_required(VERSION 2.8) project(IM_Protobuf) set(PROJECT_OUTNAME HelloProtoBuf) SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -O2 -fshort-wchar -fopenmp -fPIC") SET(PROJECT_LIBS_PLATFORM libprotobuf.so ) SET(PROJECT_HDRS inc/message.pb.h ) INCLUDE_DIRECTORIES( inc/ ) SET(PROJECT_SRCS src/main.cpp src/message.pb.cc ) # 二進制文件輸出目錄 SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin/) add_executable(${PROJECT_OUTNAME} ${PROJECT_SRCS} ${PROJECT_HDRS}) TARGET_LINK_LIBRARIES(${PROJECT_OUTNAME} ${PROJECT_LIBS_PLATFORM}) ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看