• ubuntu18.04上安装protubuf3.19.4


    1、下载protobuf

    sudo wget https://github.com/protocolbuffers/protobuf/releases/download/v3.19.4/protobuf-all-3.19.4.tar.gz
    
    • 1

    2、解压protobuf

    sudo tar -zxvf protobuf-all-3.19.4.tar.gz
    
    • 1

    3、编译安装

     cd protobuf-3.19.4
     sudo ./autogen.sh
     sudo ./configure --prefix=/usr/local  #--prefix指定安装目录||sudo ./configure --prefix=$/usr/local  #--prefix指定安装目录
     sudo make
     sudo make check
     sudo make install
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    4、配置环境变量和动态连接库
    更改环境变量:

     sudo vim /etc/profile
    
    • 1
    在文件的末尾添加如下的两行: (把bin路径和pkgconfig路径添加到系统PATH)
    
    • 1
     export PATH=P A T H : PATH:PATH:/usr/local/bin/
     export PKG_CONFIG_PATH=$/usr/local/lib/pkgconfig/
    
    • 1
    • 2
    配置动态链接库
    sudo vim /etc/ld.so.conf
    
    • 1
    • 2
    /usr/local/protobuf/lib
    $/usr/local/lib
    
    • 1
    • 2

    更改完成之后ldconfig即可
    {
    a、在 Vim 编辑器中,移动光标到文件的末尾或你想插入内容的位置。
    b、按下 i 键进入插入模式,并输入你想添加的新内容。
    c、按下 Esc 键退出插入模式。
    d、输入 :wq 命令,保存并退出文件。如果需要仅保存文件而不退出 Vim,可以输入 :w 命令。
    }
    5、查看是否安装成功
    protoc --version
    test.proc代码

    syntax = "proto3";
    
    package contacts;
    
    message LoginRequest
    {
        string name = 1;
        string pwd = 2;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    编译test.proc

    6、执行protobuf

    test.proto protoc test.proto --cpp_out=./
    
    • 1

    main.cppdaima

    #include
    #include"test.pb.h"
    #include
    using namespace std;
    #include "google/protobuf/io/zero_copy_stream_impl.h"
    #include "google/protobuf/text_format.h"
    
    int main()
    {
        contacts::LoginRequest tmp;
        tmp.set_name("shengjie");
        tmp.set_pwd("123456");
        string str;
        tmp.SerializeToString(&str);
        cout<<"str:"<<str<<endl;
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    test.pb.c代码

    // Generated by the protocol buffer compiler.  DO NOT EDIT!
    // source: test.proto
    
    #ifndef GOOGLE_PROTOBUF_INCLUDED_test_2eproto
    #define GOOGLE_PROTOBUF_INCLUDED_test_2eproto
    
    #include 
    #include 
    
    #include 
    #if PROTOBUF_VERSION < 3019000
    #error This file was generated by a newer version of protoc which is
    #error incompatible with your Protocol Buffer headers. Please update
    #error your headers.
    #endif
    #if 3019004 < PROTOBUF_MIN_PROTOC_VERSION
    #error This file was generated by an older version of protoc which is
    #error incompatible with your Protocol Buffer headers. Please
    #error regenerate this file with a newer version of protoc.
    #endif
    
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include   // IWYU pragma: export
    #include   // IWYU pragma: export
    #include 
    // @@protoc_insertion_point(includes)
    #include 
    #define PROTOBUF_INTERNAL_EXPORT_test_2eproto
    PROTOBUF_NAMESPACE_OPEN
    namespace internal {
    class AnyMetadata;
    }  // namespace internal
    PROTOBUF_NAMESPACE_CLOSE
    
    // Internal implementation detail -- do not use these members.
    struct TableStruct_test_2eproto {
      static const ::PROTOBUF_NAMESPACE_ID::internal::ParseTableField entries[]
        PROTOBUF_SECTION_VARIABLE(protodesc_cold);
      static const ::PROTOBUF_NAMESPACE_ID::internal::AuxiliaryParseTableField aux[]
        PROTOBUF_SECTION_VARIABLE(protodesc_cold);
      static const ::PROTOBUF_NAMESPACE_ID::internal::ParseTable schema[1]
        PROTOBUF_SECTION_VARIABLE(protodesc_cold);
      static const ::PROTOBUF_NAMESPACE_ID::internal::FieldMetadata field_metadata[];
      static const ::PROTOBUF_NAMESPACE_ID::internal::SerializationTable serialization_table[];
      static const uint32_t offsets[];
    };
    extern const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable descriptor_table_test_2eproto;
    namespace contacts {
    class LoginRequest;
    struct LoginRequestDefaultTypeInternal;
    extern LoginRequestDefaultTypeInternal _LoginRequest_default_instance_;
    }  // namespace contacts
    PROTOBUF_NAMESPACE_OPEN
    template<> ::contacts::LoginRequest* Arena::CreateMaybeMessage<::contacts::LoginRequest>(Arena*);
    PROTOBUF_NAMESPACE_CLOSE
    namespace contacts {
    
    // ===================================================================
    
    class LoginRequest final :
        public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:contacts.LoginRequest) */ {
     public:
      inline LoginRequest() : LoginRequest(nullptr) {}
      ~LoginRequest() override;
      explicit constexpr LoginRequest(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized);
    
      LoginRequest(const LoginRequest& from);
      LoginRequest(LoginRequest&& from) noexcept
        : LoginRequest() {
        *this = ::std::move(from);
      }
    
      inline LoginRequest& operator=(const LoginRequest& from) {
        CopyFrom(from);
        return *this;
      }
      inline LoginRequest& operator=(LoginRequest&& from) noexcept {
        if (this == &from) return *this;
        if (GetOwningArena() == from.GetOwningArena()
      #ifdef PROTOBUF_FORCE_COPY_IN_MOVE
            && GetOwningArena() != nullptr
      #endif  // !PROTOBUF_FORCE_COPY_IN_MOVE
        ) {
          InternalSwap(&from);
        } else {
          CopyFrom(from);
        }
        return *this;
      }
    
      static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
        return GetDescriptor();
      }
      static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
        return default_instance().GetMetadata().descriptor;
      }
      static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
        return default_instance().GetMetadata().reflection;
      }
      static const LoginRequest& default_instance() {
        return *internal_default_instance();
      }
      static inline const LoginRequest* internal_default_instance() {
        return reinterpret_cast<const LoginRequest*>(
                   &_LoginRequest_default_instance_);
      }
      static constexpr int kIndexInFileMessages =
        0;
    
      friend void swap(LoginRequest& a, LoginRequest& b) {
        a.Swap(&b);
      }
      inline void Swap(LoginRequest* other) {
        if (other == this) return;
      #ifdef PROTOBUF_FORCE_COPY_IN_SWAP
        if (GetOwningArena() != nullptr &&
            GetOwningArena() == other->GetOwningArena()) {
       #else  // PROTOBUF_FORCE_COPY_IN_SWAP
        if (GetOwningArena() == other->GetOwningArena()) {
      #endif  // !PROTOBUF_FORCE_COPY_IN_SWAP
          InternalSwap(other);
        } else {
          ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
        }
      }
      void UnsafeArenaSwap(LoginRequest* other) {
        if (other == this) return;
        GOOGLE_DCHECK(GetOwningArena() == other->GetOwningArena());
        InternalSwap(other);
      }
    
      // implements Message ----------------------------------------------
    
      LoginRequest* New(::PROTOBUF_NAMESPACE_ID::Arena* arena = nullptr) const final {
        return CreateMaybeMessage<LoginRequest>(arena);
      }
      using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom;
      void CopyFrom(const LoginRequest& from);
      using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom;
      void MergeFrom(const LoginRequest& from);
      private:
      static void MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to, const ::PROTOBUF_NAMESPACE_ID::Message& from);
      public:
      PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
      bool IsInitialized() const final;
    
      size_t ByteSizeLong() const final;
      const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
      uint8_t* _InternalSerialize(
          uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
      int GetCachedSize() const final { return _cached_size_.Get(); }
    
      private:
      void SharedCtor();
      void SharedDtor();
      void SetCachedSize(int size) const final;
      void InternalSwap(LoginRequest* other);
    
      private:
      friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
      static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
        return "contacts.LoginRequest";
      }
      protected:
      explicit LoginRequest(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                           bool is_message_owned = false);
      private:
      static void ArenaDtor(void* object);
      inline void RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena* arena);
      public:
    
      static const ClassData _class_data_;
      const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*GetClassData() const final;
    
      ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
    
      // nested types ----------------------------------------------------
    
      // accessors -------------------------------------------------------
    
      enum : int {
        kNameFieldNumber = 1,
        kPwdFieldNumber = 2,
      };
      // string name = 1;
      void clear_name();
      const std::string& name() const;
      template <typename ArgT0 = const std::string&, typename... ArgT>
      void set_name(ArgT0&& arg0, ArgT... args);
      std::string* mutable_name();
      PROTOBUF_NODISCARD std::string* release_name();
      void set_allocated_name(std::string* name);
      private:
      const std::string& _internal_name() const;
      inline PROTOBUF_ALWAYS_INLINE void _internal_set_name(const std::string& value);
      std::string* _internal_mutable_name();
      public:
    
      // string pwd = 2;
      void clear_pwd();
      const std::string& pwd() const;
      template <typename ArgT0 = const std::string&, typename... ArgT>
      void set_pwd(ArgT0&& arg0, ArgT... args);
      std::string* mutable_pwd();
      PROTOBUF_NODISCARD std::string* release_pwd();
      void set_allocated_pwd(std::string* pwd);
      private:
      const std::string& _internal_pwd() const;
      inline PROTOBUF_ALWAYS_INLINE void _internal_set_pwd(const std::string& value);
      std::string* _internal_mutable_pwd();
      public:
    
      // @@protoc_insertion_point(class_scope:contacts.LoginRequest)
     private:
      class _Internal;
    
      template <typename T> friend class ::PROTOBUF_NAMESPACE_ID::Arena::InternalHelper;
      typedef void InternalArenaConstructable_;
      typedef void DestructorSkippable_;
      ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr name_;
      ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr pwd_;
      mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
      friend struct ::TableStruct_test_2eproto;
    };
    // ===================================================================
    
    
    // ===================================================================
    
    #ifdef __GNUC__
      #pragma GCC diagnostic push
      #pragma GCC diagnostic ignored "-Wstrict-aliasing"
    #endif  // __GNUC__
    // LoginRequest
    
    // string name = 1;
    inline void LoginRequest::clear_name() {
      name_.ClearToEmpty();
    }
    inline const std::string& LoginRequest::name() const {
      // @@protoc_insertion_point(field_get:contacts.LoginRequest.name)
      return _internal_name();
    }
    template <typename ArgT0, typename... ArgT>
    inline PROTOBUF_ALWAYS_INLINE
    void LoginRequest::set_name(ArgT0&& arg0, ArgT... args) {
     
     name_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation());
      // @@protoc_insertion_point(field_set:contacts.LoginRequest.name)
    }
    inline std::string* LoginRequest::mutable_name() {
      std::string* _s = _internal_mutable_name();
      // @@protoc_insertion_point(field_mutable:contacts.LoginRequest.name)
      return _s;
    }
    inline const std::string& LoginRequest::_internal_name() const {
      return name_.Get();
    }
    inline void LoginRequest::_internal_set_name(const std::string& value) {
      
      name_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArenaForAllocation());
    }
    inline std::string* LoginRequest::_internal_mutable_name() {
      
      return name_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArenaForAllocation());
    }
    inline std::string* LoginRequest::release_name() {
      // @@protoc_insertion_point(field_release:contacts.LoginRequest.name)
      return name_.Release(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArenaForAllocation());
    }
    inline void LoginRequest::set_allocated_name(std::string* name) {
      if (name != nullptr) {
        
      } else {
        
      }
      name_.SetAllocated(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), name,
          GetArenaForAllocation());
    #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
      if (name_.IsDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited())) {
        name_.Set(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), "", GetArenaForAllocation());
      }
    #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
      // @@protoc_insertion_point(field_set_allocated:contacts.LoginRequest.name)
    }
    
    // string pwd = 2;
    inline void LoginRequest::clear_pwd() {
      pwd_.ClearToEmpty();
    }
    inline const std::string& LoginRequest::pwd() const {
      // @@protoc_insertion_point(field_get:contacts.LoginRequest.pwd)
      return _internal_pwd();
    }
    template <typename ArgT0, typename... ArgT>
    inline PROTOBUF_ALWAYS_INLINE
    void LoginRequest::set_pwd(ArgT0&& arg0, ArgT... args) {
     
     pwd_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, static_cast<ArgT0 &&>(arg0), args..., GetArenaForAllocation());
      // @@protoc_insertion_point(field_set:contacts.LoginRequest.pwd)
    }
    inline std::string* LoginRequest::mutable_pwd() {
      std::string* _s = _internal_mutable_pwd();
      // @@protoc_insertion_point(field_mutable:contacts.LoginRequest.pwd)
      return _s;
    }
    inline const std::string& LoginRequest::_internal_pwd() const {
      return pwd_.Get();
    }
    inline void LoginRequest::_internal_set_pwd(const std::string& value) {
      
      pwd_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArenaForAllocation());
    }
    inline std::string* LoginRequest::_internal_mutable_pwd() {
      
      return pwd_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArenaForAllocation());
    }
    inline std::string* LoginRequest::release_pwd() {
      // @@protoc_insertion_point(field_release:contacts.LoginRequest.pwd)
      return pwd_.Release(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArenaForAllocation());
    }
    inline void LoginRequest::set_allocated_pwd(std::string* pwd) {
      if (pwd != nullptr) {
        
      } else {
        
      }
      pwd_.SetAllocated(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), pwd,
          GetArenaForAllocation());
    #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
      if (pwd_.IsDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited())) {
        pwd_.Set(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), "", GetArenaForAllocation());
      }
    #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
      // @@protoc_insertion_point(field_set_allocated:contacts.LoginRequest.pwd)
    }
    
    #ifdef __GNUC__
      #pragma GCC diagnostic pop
    #endif  // __GNUC__
    
    // @@protoc_insertion_point(namespace_scope)
    
    }  // namespace contacts
    
    // @@protoc_insertion_point(global_scope)
    
    #include 
    #endif  // GOOGLE_PROTOBUF_INCLUDED_GOOGLE_PROTOBUF_INCLUDED_test_2eproto
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138
    • 139
    • 140
    • 141
    • 142
    • 143
    • 144
    • 145
    • 146
    • 147
    • 148
    • 149
    • 150
    • 151
    • 152
    • 153
    • 154
    • 155
    • 156
    • 157
    • 158
    • 159
    • 160
    • 161
    • 162
    • 163
    • 164
    • 165
    • 166
    • 167
    • 168
    • 169
    • 170
    • 171
    • 172
    • 173
    • 174
    • 175
    • 176
    • 177
    • 178
    • 179
    • 180
    • 181
    • 182
    • 183
    • 184
    • 185
    • 186
    • 187
    • 188
    • 189
    • 190
    • 191
    • 192
    • 193
    • 194
    • 195
    • 196
    • 197
    • 198
    • 199
    • 200
    • 201
    • 202
    • 203
    • 204
    • 205
    • 206
    • 207
    • 208
    • 209
    • 210
    • 211
    • 212
    • 213
    • 214
    • 215
    • 216
    • 217
    • 218
    • 219
    • 220
    • 221
    • 222
    • 223
    • 224
    • 225
    • 226
    • 227
    • 228
    • 229
    • 230
    • 231
    • 232
    • 233
    • 234
    • 235
    • 236
    • 237
    • 238
    • 239
    • 240
    • 241
    • 242
    • 243
    • 244
    • 245
    • 246
    • 247
    • 248
    • 249
    • 250
    • 251
    • 252
    • 253
    • 254
    • 255
    • 256
    • 257
    • 258
    • 259
    • 260
    • 261
    • 262
    • 263
    • 264
    • 265
    • 266
    • 267
    • 268
    • 269
    • 270
    • 271
    • 272
    • 273
    • 274
    • 275
    • 276
    • 277
    • 278
    • 279
    • 280
    • 281
    • 282
    • 283
    • 284
    • 285
    • 286
    • 287
    • 288
    • 289
    • 290
    • 291
    • 292
    • 293
    • 294
    • 295
    • 296
    • 297
    • 298
    • 299
    • 300
    • 301
    • 302
    • 303
    • 304
    • 305
    • 306
    • 307
    • 308
    • 309
    • 310
    • 311
    • 312
    • 313
    • 314
    • 315
    • 316
    • 317
    • 318
    • 319
    • 320
    • 321
    • 322
    • 323
    • 324
    • 325
    • 326
    • 327
    • 328
    • 329
    • 330
    • 331
    • 332
    • 333
    • 334
    • 335
    • 336
    • 337
    • 338
    • 339
    • 340
    • 341
    • 342
    • 343
    • 344
    • 345
    • 346
    • 347
    • 348
    • 349
    • 350
    • 351
    • 352
    • 353
    • 354
    • 355
    • 356
    • 357
    • 358

    test.pb.ccd代码

    // Generated by the protocol buffer compiler.  DO NOT EDIT!
    // source: test.proto
    
    #include "test.pb.h"
    
    #include 
    
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    // @@protoc_insertion_point(includes)
    #include 
    
    PROTOBUF_PRAGMA_INIT_SEG
    namespace contacts {
    constexpr LoginRequest::LoginRequest(
      ::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized)
      : name_(&::PROTOBUF_NAMESPACE_ID::internal::fixed_address_empty_string)
      , pwd_(&::PROTOBUF_NAMESPACE_ID::internal::fixed_address_empty_string){}
    struct LoginRequestDefaultTypeInternal {
      constexpr LoginRequestDefaultTypeInternal()
        : _instance(::PROTOBUF_NAMESPACE_ID::internal::ConstantInitialized{}) {}
      ~LoginRequestDefaultTypeInternal() {}
      union {
        LoginRequest _instance;
      };
    };
    PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT LoginRequestDefaultTypeInternal _LoginRequest_default_instance_;
    }  // namespace contacts
    static ::PROTOBUF_NAMESPACE_ID::Metadata file_level_metadata_test_2eproto[1];
    static constexpr ::PROTOBUF_NAMESPACE_ID::EnumDescriptor const** file_level_enum_descriptors_test_2eproto = nullptr;
    static constexpr ::PROTOBUF_NAMESPACE_ID::ServiceDescriptor const** file_level_service_descriptors_test_2eproto = nullptr;
    
    const uint32_t TableStruct_test_2eproto::offsets[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) = {
      ~0u,  // no _has_bits_
      PROTOBUF_FIELD_OFFSET(::contacts::LoginRequest, _internal_metadata_),
      ~0u,  // no _extensions_
      ~0u,  // no _oneof_case_
      ~0u,  // no _weak_field_map_
      ~0u,  // no _inlined_string_donated_
      PROTOBUF_FIELD_OFFSET(::contacts::LoginRequest, name_),
      PROTOBUF_FIELD_OFFSET(::contacts::LoginRequest, pwd_),
    };
    static const ::PROTOBUF_NAMESPACE_ID::internal::MigrationSchema schemas[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) = {
      { 0, -1, -1, sizeof(::contacts::LoginRequest)},
    };
    
    static ::PROTOBUF_NAMESPACE_ID::Message const * const file_default_instances[] = {
      reinterpret_cast<const ::PROTOBUF_NAMESPACE_ID::Message*>(&::contacts::_LoginRequest_default_instance_),
    };
    
    const char descriptor_table_protodef_test_2eproto[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) =
      "\n\ntest.proto\022\010contacts\")\n\014LoginRequest\022\014"
      "\n\004name\030\001 \001(\t\022\013\n\003pwd\030\002 \001(\tb\006proto3"
      ;
    static ::PROTOBUF_NAMESPACE_ID::internal::once_flag descriptor_table_test_2eproto_once;
    const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable descriptor_table_test_2eproto = {
      false, false, 73, descriptor_table_protodef_test_2eproto, "test.proto", 
      &descriptor_table_test_2eproto_once, nullptr, 0, 1,
      schemas, file_default_instances, TableStruct_test_2eproto::offsets,
      file_level_metadata_test_2eproto, file_level_enum_descriptors_test_2eproto, file_level_service_descriptors_test_2eproto,
    };
    PROTOBUF_ATTRIBUTE_WEAK const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable* descriptor_table_test_2eproto_getter() {
      return &descriptor_table_test_2eproto;
    }
    
    // Force running AddDescriptors() at dynamic initialization time.
    PROTOBUF_ATTRIBUTE_INIT_PRIORITY static ::PROTOBUF_NAMESPACE_ID::internal::AddDescriptorsRunner dynamic_init_dummy_test_2eproto(&descriptor_table_test_2eproto);
    namespace contacts {
    
    // ===================================================================
    
    class LoginRequest::_Internal {
     public:
    };
    
    LoginRequest::LoginRequest(::PROTOBUF_NAMESPACE_ID::Arena* arena,
                             bool is_message_owned)
      : ::PROTOBUF_NAMESPACE_ID::Message(arena, is_message_owned) {
      SharedCtor();
      if (!is_message_owned) {
        RegisterArenaDtor(arena);
      }
      // @@protoc_insertion_point(arena_constructor:contacts.LoginRequest)
    }
    LoginRequest::LoginRequest(const LoginRequest& from)
      : ::PROTOBUF_NAMESPACE_ID::Message() {
      _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
      name_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
      #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
        name_.Set(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), "", GetArenaForAllocation());
      #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
      if (!from._internal_name().empty()) {
        name_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, from._internal_name(), 
          GetArenaForAllocation());
      }
      pwd_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
      #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
        pwd_.Set(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), "", GetArenaForAllocation());
      #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
      if (!from._internal_pwd().empty()) {
        pwd_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, from._internal_pwd(), 
          GetArenaForAllocation());
      }
      // @@protoc_insertion_point(copy_constructor:contacts.LoginRequest)
    }
    
    inline void LoginRequest::SharedCtor() {
    name_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
    #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
      name_.Set(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), "", GetArenaForAllocation());
    #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
    pwd_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
    #ifdef PROTOBUF_FORCE_COPY_DEFAULT_STRING
      pwd_.Set(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), "", GetArenaForAllocation());
    #endif // PROTOBUF_FORCE_COPY_DEFAULT_STRING
    }
    
    LoginRequest::~LoginRequest() {
      // @@protoc_insertion_point(destructor:contacts.LoginRequest)
      if (GetArenaForAllocation() != nullptr) return;
      SharedDtor();
      _internal_metadata_.Delete<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
    }
    
    inline void LoginRequest::SharedDtor() {
      GOOGLE_DCHECK(GetArenaForAllocation() == nullptr);
      name_.DestroyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
      pwd_.DestroyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
    }
    
    void LoginRequest::ArenaDtor(void* object) {
      LoginRequest* _this = reinterpret_cast< LoginRequest* >(object);
      (void)_this;
    }
    void LoginRequest::RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena*) {
    }
    void LoginRequest::SetCachedSize(int size) const {
      _cached_size_.Set(size);
    }
    
    void LoginRequest::Clear() {
    // @@protoc_insertion_point(message_clear_start:contacts.LoginRequest)
      uint32_t cached_has_bits = 0;
      // Prevent compiler warnings about cached_has_bits being unused
      (void) cached_has_bits;
    
      name_.ClearToEmpty();
      pwd_.ClearToEmpty();
      _internal_metadata_.Clear<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>();
    }
    
    const char* LoginRequest::_InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) {
    #define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
      while (!ctx->Done(&ptr)) {
        uint32_t tag;
        ptr = ::PROTOBUF_NAMESPACE_ID::internal::ReadTag(ptr, &tag);
        switch (tag >> 3) {
          // string name = 1;
          case 1:
            if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 10)) {
              auto str = _internal_mutable_name();
              ptr = ::PROTOBUF_NAMESPACE_ID::internal::InlineGreedyStringParser(str, ptr, ctx);
              CHK_(::PROTOBUF_NAMESPACE_ID::internal::VerifyUTF8(str, "contacts.LoginRequest.name"));
              CHK_(ptr);
            } else
              goto handle_unusual;
            continue;
          // string pwd = 2;
          case 2:
            if (PROTOBUF_PREDICT_TRUE(static_cast<uint8_t>(tag) == 18)) {
              auto str = _internal_mutable_pwd();
              ptr = ::PROTOBUF_NAMESPACE_ID::internal::InlineGreedyStringParser(str, ptr, ctx);
              CHK_(::PROTOBUF_NAMESPACE_ID::internal::VerifyUTF8(str, "contacts.LoginRequest.pwd"));
              CHK_(ptr);
            } else
              goto handle_unusual;
            continue;
          default:
            goto handle_unusual;
        }  // switch
      handle_unusual:
        if ((tag == 0) || ((tag & 7) == 4)) {
          CHK_(ptr);
          ctx->SetLastTag(tag);
          goto message_done;
        }
        ptr = UnknownFieldParse(
            tag,
            _internal_metadata_.mutable_unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(),
            ptr, ctx);
        CHK_(ptr != nullptr);
      }  // while
    message_done:
      return ptr;
    failure:
      ptr = nullptr;
      goto message_done;
    #undef CHK_
    }
    
    uint8_t* LoginRequest::_InternalSerialize(
        uint8_t* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const {
      // @@protoc_insertion_point(serialize_to_array_start:contacts.LoginRequest)
      uint32_t cached_has_bits = 0;
      (void) cached_has_bits;
    
      // string name = 1;
      if (!this->_internal_name().empty()) {
        ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
          this->_internal_name().data(), static_cast<int>(this->_internal_name().length()),
          ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
          "contacts.LoginRequest.name");
        target = stream->WriteStringMaybeAliased(
            1, this->_internal_name(), target);
      }
    
      // string pwd = 2;
      if (!this->_internal_pwd().empty()) {
        ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
          this->_internal_pwd().data(), static_cast<int>(this->_internal_pwd().length()),
          ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
          "contacts.LoginRequest.pwd");
        target = stream->WriteStringMaybeAliased(
            2, this->_internal_pwd(), target);
      }
    
      if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
        target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormat::InternalSerializeUnknownFieldsToArray(
            _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance), target, stream);
      }
      // @@protoc_insertion_point(serialize_to_array_end:contacts.LoginRequest)
      return target;
    }
    
    size_t LoginRequest::ByteSizeLong() const {
    // @@protoc_insertion_point(message_byte_size_start:contacts.LoginRequest)
      size_t total_size = 0;
    
      uint32_t cached_has_bits = 0;
      // Prevent compiler warnings about cached_has_bits being unused
      (void) cached_has_bits;
    
      // string name = 1;
      if (!this->_internal_name().empty()) {
        total_size += 1 +
          ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
            this->_internal_name());
      }
    
      // string pwd = 2;
      if (!this->_internal_pwd().empty()) {
        total_size += 1 +
          ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
            this->_internal_pwd());
      }
    
      return MaybeComputeUnknownFieldsSize(total_size, &_cached_size_);
    }
    
    const ::PROTOBUF_NAMESPACE_ID::Message::ClassData LoginRequest::_class_data_ = {
        ::PROTOBUF_NAMESPACE_ID::Message::CopyWithSizeCheck,
        LoginRequest::MergeImpl
    };
    const ::PROTOBUF_NAMESPACE_ID::Message::ClassData*LoginRequest::GetClassData() const { return &_class_data_; }
    
    void LoginRequest::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message* to,
                          const ::PROTOBUF_NAMESPACE_ID::Message& from) {
      static_cast<LoginRequest *>(to)->MergeFrom(
          static_cast<const LoginRequest &>(from));
    }
    
    
    void LoginRequest::MergeFrom(const LoginRequest& from) {
    // @@protoc_insertion_point(class_specific_merge_from_start:contacts.LoginRequest)
      GOOGLE_DCHECK_NE(&from, this);
      uint32_t cached_has_bits = 0;
      (void) cached_has_bits;
    
      if (!from._internal_name().empty()) {
        _internal_set_name(from._internal_name());
      }
      if (!from._internal_pwd().empty()) {
        _internal_set_pwd(from._internal_pwd());
      }
      _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_);
    }
    
    void LoginRequest::CopyFrom(const LoginRequest& from) {
    // @@protoc_insertion_point(class_specific_copy_from_start:contacts.LoginRequest)
      if (&from == this) return;
      Clear();
      MergeFrom(from);
    }
    
    bool LoginRequest::IsInitialized() const {
      return true;
    }
    
    void LoginRequest::InternalSwap(LoginRequest* other) {
      using std::swap;
      auto* lhs_arena = GetArenaForAllocation();
      auto* rhs_arena = other->GetArenaForAllocation();
      _internal_metadata_.InternalSwap(&other->_internal_metadata_);
      ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap(
          &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(),
          &name_, lhs_arena,
          &other->name_, rhs_arena
      );
      ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::InternalSwap(
          &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(),
          &pwd_, lhs_arena,
          &other->pwd_, rhs_arena
      );
    }
    
    ::PROTOBUF_NAMESPACE_ID::Metadata LoginRequest::GetMetadata() const {
      return ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(
          &descriptor_table_test_2eproto_getter, &descriptor_table_test_2eproto_once,
          file_level_metadata_test_2eproto[0]);
    }
    
    // @@protoc_insertion_point(namespace_scope)
    }  // namespace contacts
    PROTOBUF_NAMESPACE_OPEN
    template<> PROTOBUF_NOINLINE ::contacts::LoginRequest* Arena::CreateMaybeMessage< ::contacts::LoginRequest >(Arena* arena) {
      return Arena::CreateMessageInternal< ::contacts::LoginRequest >(arena);
    }
    PROTOBUF_NAMESPACE_CLOSE
    
    // @@protoc_insertion_point(global_scope)
    #include 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138
    • 139
    • 140
    • 141
    • 142
    • 143
    • 144
    • 145
    • 146
    • 147
    • 148
    • 149
    • 150
    • 151
    • 152
    • 153
    • 154
    • 155
    • 156
    • 157
    • 158
    • 159
    • 160
    • 161
    • 162
    • 163
    • 164
    • 165
    • 166
    • 167
    • 168
    • 169
    • 170
    • 171
    • 172
    • 173
    • 174
    • 175
    • 176
    • 177
    • 178
    • 179
    • 180
    • 181
    • 182
    • 183
    • 184
    • 185
    • 186
    • 187
    • 188
    • 189
    • 190
    • 191
    • 192
    • 193
    • 194
    • 195
    • 196
    • 197
    • 198
    • 199
    • 200
    • 201
    • 202
    • 203
    • 204
    • 205
    • 206
    • 207
    • 208
    • 209
    • 210
    • 211
    • 212
    • 213
    • 214
    • 215
    • 216
    • 217
    • 218
    • 219
    • 220
    • 221
    • 222
    • 223
    • 224
    • 225
    • 226
    • 227
    • 228
    • 229
    • 230
    • 231
    • 232
    • 233
    • 234
    • 235
    • 236
    • 237
    • 238
    • 239
    • 240
    • 241
    • 242
    • 243
    • 244
    • 245
    • 246
    • 247
    • 248
    • 249
    • 250
    • 251
    • 252
    • 253
    • 254
    • 255
    • 256
    • 257
    • 258
    • 259
    • 260
    • 261
    • 262
    • 263
    • 264
    • 265
    • 266
    • 267
    • 268
    • 269
    • 270
    • 271
    • 272
    • 273
    • 274
    • 275
    • 276
    • 277
    • 278
    • 279
    • 280
    • 281
    • 282
    • 283
    • 284
    • 285
    • 286
    • 287
    • 288
    • 289
    • 290
    • 291
    • 292
    • 293
    • 294
    • 295
    • 296
    • 297
    • 298
    • 299
    • 300
    • 301
    • 302
    • 303
    • 304
    • 305
    • 306
    • 307
    • 308
    • 309
    • 310
    • 311
    • 312
    • 313
    • 314
    • 315
    • 316
    • 317
    • 318
    • 319
    • 320
    • 321
    • 322
    • 323
    • 324
    • 325
    • 326
    • 327
    • 328
    • 329
    • 330
    • 331
    • 332
    • 333
    • 334
    • 335
    • 336
    main.cpp test.proto
    编译:test.proto protoc test.proto --cpp_out=./
    g++ main.cpp test.pb.cc -I/usr/local/include -L/usr/local/lib -lprotobuf 
    
    • 1
    • 2
    • 3

    7、执行main.cpp代码

    g++ main.cpp test.pb.cc -I/usr/local/include -L/usr/local/lib -lprotobuf 
    
    • 1

    8、查看ubuntu的版本:lsb_release -a,cat /etc/issue
    9、查看内核版本:uname -r

  • 相关阅读:
    Day07 狂神说Java-MySQL>P40-P45
    【CSDN线上竞赛第六期竞赛 】参赛介绍
    STM32矩阵按键
    MIPI 打怪升级之DSI篇
    道路标识检测模型更新
    报价又快又准,ERP系统助力元器件贸易企业快速开单
    PostgreSQL索引篇 | GIN索引 (倒排索引)
    Windows 12 开源网页版
    Webpack完整打包流程分析
    RabbitMQ安装(发生系统错误5。拒绝访问)解决方案
  • 原文地址:https://blog.csdn.net/qq_41452177/article/details/134232394