Search code examples
c++ubuntumakefilegrpcprotoc

grpc compile error protobuf 3.2.0 (file was generated with older version of protoc) Ubuntu 16.04


I tried compiling grpc for cpp in an Ubuntu 16.04.02 virtual machine. Since the protobuf version supplied with grpc doesn't compile (unzip say one of the zip files is corrupt) I compiled protobuf 3.2.0 (which should be the right version to my understanding) myself from source, which worked fine.

When I now run make to compile grpc I get a lengthy error which has something to do with the fact that some files were generated with an older protoc version. (I add the full error message at the bottom). So my question is: is 3.2 the wrong protobuf version or is it a different problem? I also tried removing the protobuf directory from the third-party directory of grpc according to Need help to install c++ grpc on ubuntu 16.04 but it didn't change anyhting.

Thanks in advance!

Error Message:

[CXX]     Compiling src/cpp/ext/proto_server_reflection.cc
In file included from include/grpc++/ext/reflection.grpc.pb.h:73:0,
                 from ./src/cpp/ext/proto_server_reflection.h:39,
                 from src/cpp/ext/proto_server_reflection.cc:39:
include/grpc++/ext/reflection.pb.h:51:2: error: #error This file was generated by an older version of protoc which is
 #error This file was generated by an older version of protoc which is
  ^
include/grpc++/ext/reflection.pb.h:52:2: error: #error incompatible with your Protocol Buffer headers. Please
 #error incompatible with your Protocol Buffer headers.  Please
  ^
include/grpc++/ext/reflection.pb.h:53:2: error: #error regenerate this file with a newer version of protoc.
 #error regenerate this file with a newer version of protoc.
  ^
In file included from include/grpc++/ext/reflection.grpc.pb.h:73:0,
                 from ./src/cpp/ext/proto_server_reflection.h:39,
                 from src/cpp/ext/proto_server_reflection.cc:39:
include/grpc++/ext/reflection.pb.h: In member function ‘const string& grpc::reflection::v1alpha::ServerReflectionRequest::host() const’:
include/grpc++/ext/reflection.pb.h:994:87: error: no matching function for call to ‘google::protobuf::internal::ArenaStringPtr::GetNoArena(const string*) const’
 host_.GetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
                                                                              ^
In file included from include/grpc++/ext/reflection.pb.h:57:0,
                 from include/grpc++/ext/reflection.grpc.pb.h:73,
                 from ./src/cpp/ext/proto_server_reflection.h:39,
                 from src/cpp/ext/proto_server_reflection.cc:39:
/usr/local/include/google/protobuf/arenastring.h:225:31: note: candidate: const string& google::protobuf::internal::ArenaStringPtr::GetNoArena() const
   inline const ::std::string& GetNoArena() const { return *ptr_; }
                               ^
/usr/local/include/google/protobuf/arenastring.h:225:31: note:   candidate expects 0 arguments, 1 provided
In file included from include/grpc++/ext/reflection.grpc.pb.h:73:0,
                 from ./src/cpp/ext/proto_server_reflection.h:39,
                 from src/cpp/ext/proto_server_reflection.cc:39:
include/grpc++/ext/reflection.pb.h: In member function ‘const string& grpc::reflection::v1alpha::ServerReflectionRequest::file_by_filename() const’:
include/grpc++/ext/reflection.pb.h:1048:118: error: no matching function for call to ‘google::protobuf::internal::ArenaStringPtr::GetNoArena(const string*) const’
 name_.GetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
                                                                              ^
In file included from include/grpc++/ext/reflection.pb.h:57:0,
                 from include/grpc++/ext/reflection.grpc.pb.h:73,
                 from ./src/cpp/ext/proto_server_reflection.h:39,
                 from src/cpp/ext/proto_server_reflection.cc:39:
/usr/local/include/google/protobuf/arenastring.h:225:31: note: candidate: const string& google::protobuf::internal::ArenaStringPtr::GetNoArena() const
   inline const ::std::string& GetNoArena() const { return *ptr_; }
                               ^
/usr/local/include/google/protobuf/arenastring.h:225:31: note:   candidate expects 0 arguments, 1 provided
In file included from include/grpc++/ext/reflection.grpc.pb.h:73:0,
                 from ./src/cpp/ext/proto_server_reflection.h:39,
                 from src/cpp/ext/proto_server_reflection.cc:39:
include/grpc++/ext/reflection.pb.h: In member function ‘const string& grpc::reflection::v1alpha::ServerReflectionRequest::file_containing_symbol() const’:
include/grpc++/ext/reflection.pb.h:1129:124: error: no matching function for call to ‘google::protobuf::internal::ArenaStringPtr::GetNoArena(const string*) const’
 mbol_.GetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
                                                                              ^
In file included from include/grpc++/ext/reflection.pb.h:57:0,
                 from include/grpc++/ext/reflection.grpc.pb.h:73,
                 from ./src/cpp/ext/proto_server_reflection.h:39,
                 from src/cpp/ext/proto_server_reflection.cc:39:
/usr/local/include/google/protobuf/arenastring.h:225:31: note: candidate: const string& google::protobuf::internal::ArenaStringPtr::GetNoArena() const
   inline const ::std::string& GetNoArena() const { return *ptr_; }
                               ^
/usr/local/include/google/protobuf/arenastring.h:225:31: note:   candidate expects 0 arguments, 1 provided
In file included from include/grpc++/ext/reflection.grpc.pb.h:73:0,
                 from ./src/cpp/ext/proto_server_reflection.h:39,
                 from src/cpp/ext/proto_server_reflection.cc:39:
include/grpc++/ext/reflection.pb.h: In member function ‘const string& grpc::reflection::v1alpha::ServerReflectionRequest::all_extension_numbers_of_type() const’:
include/grpc++/ext/reflection.pb.h:1258:131: error: no matching function for call to ‘google::protobuf::internal::ArenaStringPtr::GetNoArena(const string*) const’
 type_.GetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
                                                                              ^
In file included from include/grpc++/ext/reflection.pb.h:57:0,
                 from include/grpc++/ext/reflection.grpc.pb.h:73,
                 from ./src/cpp/ext/proto_server_reflection.h:39,
                 from src/cpp/ext/proto_server_reflection.cc:39:
/usr/local/include/google/protobuf/arenastring.h:225:31: note: candidate: const string& google::protobuf::internal::ArenaStringPtr::GetNoArena() const
   inline const ::std::string& GetNoArena() const { return *ptr_; }
                               ^
/usr/local/include/google/protobuf/arenastring.h:225:31: note:   candidate expects 0 arguments, 1 provided
In file included from include/grpc++/ext/reflection.grpc.pb.h:73:0,
                 from ./src/cpp/ext/proto_server_reflection.h:39,
                 from src/cpp/ext/proto_server_reflection.cc:39:
include/grpc++/ext/reflection.pb.h: In member function ‘const string& grpc::reflection::v1alpha::ServerReflectionRequest::list_services() const’:
include/grpc++/ext/reflection.pb.h:1339:115: error: no matching function for call to ‘google::protobuf::internal::ArenaStringPtr::GetNoArena(const string*) const’
 ices_.GetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
                                                                              ^
In file included from include/grpc++/ext/reflection.pb.h:57:0,
                 from include/grpc++/ext/reflection.grpc.pb.h:73,
                 from ./src/cpp/ext/proto_server_reflection.h:39,
                 from src/cpp/ext/proto_server_reflection.cc:39:
/usr/local/include/google/protobuf/arenastring.h:225:31: note: candidate: const string& google::protobuf::internal::ArenaStringPtr::GetNoArena() const
   inline const ::std::string& GetNoArena() const { return *ptr_; }
                               ^
/usr/local/include/google/protobuf/arenastring.h:225:31: note:   candidate expects 0 arguments, 1 provided
In file included from include/grpc++/ext/reflection.grpc.pb.h:73:0,
                 from ./src/cpp/ext/proto_server_reflection.h:39,
                 from src/cpp/ext/proto_server_reflection.cc:39:
include/grpc++/ext/reflection.pb.h: In member function ‘const string& grpc::reflection::v1alpha::ExtensionRequest::containing_type() const’:
include/grpc++/ext/reflection.pb.h:1423:98: error: no matching function for call to ‘google::protobuf::internal::ArenaStringPtr::GetNoArena(const string*) const’
 type_.GetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
                                                                              ^
In file included from include/grpc++/ext/reflection.pb.h:57:0,
                 from include/grpc++/ext/reflection.grpc.pb.h:73,
                 from ./src/cpp/ext/proto_server_reflection.h:39,
                 from src/cpp/ext/proto_server_reflection.cc:39:
/usr/local/include/google/protobuf/arenastring.h:225:31: note: candidate: const string& google::protobuf::internal::ArenaStringPtr::GetNoArena() const
   inline const ::std::string& GetNoArena() const { return *ptr_; }
                               ^
/usr/local/include/google/protobuf/arenastring.h:225:31: note:   candidate expects 0 arguments, 1 provided
In file included from include/grpc++/ext/reflection.grpc.pb.h:73:0,
                 from ./src/cpp/ext/proto_server_reflection.h:39,
                 from src/cpp/ext/proto_server_reflection.cc:39:
include/grpc++/ext/reflection.pb.h: In member function ‘const string& grpc::reflection::v1alpha::ServerReflectionResponse::valid_host() const’:
include/grpc++/ext/reflection.pb.h:1485:93: error: no matching function for call to ‘google::protobuf::internal::ArenaStringPtr::GetNoArena(const string*) const’
 host_.GetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
                                                                              ^
In file included from include/grpc++/ext/reflection.pb.h:57:0,
                 from include/grpc++/ext/reflection.grpc.pb.h:73,
                 from ./src/cpp/ext/proto_server_reflection.h:39,
                 from src/cpp/ext/proto_server_reflection.cc:39:
/usr/local/include/google/protobuf/arenastring.h:225:31: note: candidate: const string& google::protobuf::internal::ArenaStringPtr::GetNoArena() const
   inline const ::std::string& GetNoArena() const { return *ptr_; }
                               ^
/usr/local/include/google/protobuf/arenastring.h:225:31: note:   candidate expects 0 arguments, 1 provided
In file included from include/grpc++/ext/reflection.grpc.pb.h:73:0,
                 from ./src/cpp/ext/proto_server_reflection.h:39,
                 from src/cpp/ext/proto_server_reflection.cc:39:
include/grpc++/ext/reflection.pb.h: In member function ‘const string& grpc::reflection::v1alpha::ExtensionNumberResponse::base_type_name() const’:
include/grpc++/ext/reflection.pb.h:1831:97: error: no matching function for call to ‘google::protobuf::internal::ArenaStringPtr::GetNoArena(const string*) const’
 name_.GetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
                                                                              ^
In file included from include/grpc++/ext/reflection.pb.h:57:0,
                 from include/grpc++/ext/reflection.grpc.pb.h:73,
                 from ./src/cpp/ext/proto_server_reflection.h:39,
                 from src/cpp/ext/proto_server_reflection.cc:39:
/usr/local/include/google/protobuf/arenastring.h:225:31: note: candidate: const string& google::protobuf::internal::ArenaStringPtr::GetNoArena() const
   inline const ::std::string& GetNoArena() const { return *ptr_; }
                               ^
/usr/local/include/google/protobuf/arenastring.h:225:31: note:   candidate expects 0 arguments, 1 provided
In file included from include/grpc++/ext/reflection.grpc.pb.h:73:0,
                 from ./src/cpp/ext/proto_server_reflection.h:39,
                 from src/cpp/ext/proto_server_reflection.cc:39:
include/grpc++/ext/reflection.pb.h: In member function ‘const string& grpc::reflection::v1alpha::ServiceResponse::name() const’:
include/grpc++/ext/reflection.pb.h:1943:87: error: no matching function for call to ‘google::protobuf::internal::ArenaStringPtr::GetNoArena(const string*) const’
 name_.GetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
                                                                              ^
In file included from include/grpc++/ext/reflection.pb.h:57:0,
                 from include/grpc++/ext/reflection.grpc.pb.h:73,
                 from ./src/cpp/ext/proto_server_reflection.h:39,
                 from src/cpp/ext/proto_server_reflection.cc:39:
/usr/local/include/google/protobuf/arenastring.h:225:31: note: candidate: const string& google::protobuf::internal::ArenaStringPtr::GetNoArena() const
   inline const ::std::string& GetNoArena() const { return *ptr_; }
                               ^
/usr/local/include/google/protobuf/arenastring.h:225:31: note:   candidate expects 0 arguments, 1 provided
In file included from include/grpc++/ext/reflection.grpc.pb.h:73:0,
                 from ./src/cpp/ext/proto_server_reflection.h:39,
                 from src/cpp/ext/proto_server_reflection.cc:39:
include/grpc++/ext/reflection.pb.h: In member function ‘const string& grpc::reflection::v1alpha::ErrorResponse::error_message() const’:
include/grpc++/ext/reflection.pb.h:2005:96: error: no matching function for call to ‘google::protobuf::internal::ArenaStringPtr::GetNoArena(const string*) const’
 sage_.GetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
                                                                              ^
In file included from include/grpc++/ext/reflection.pb.h:57:0,
                 from include/grpc++/ext/reflection.grpc.pb.h:73,
                 from ./src/cpp/ext/proto_server_reflection.h:39,
                 from src/cpp/ext/proto_server_reflection.cc:39:
/usr/local/include/google/protobuf/arenastring.h:225:31: note: candidate: const string& google::protobuf::internal::ArenaStringPtr::GetNoArena() const
   inline const ::std::string& GetNoArena() const { return *ptr_; }
                               ^
/usr/local/include/google/protobuf/arenastring.h:225:31: note:   candidate expects 0 arguments, 1 provided
Makefile:2094: recipe for target '/home/snoato/Downloads/grpc/objs/opt/src/cpp/ext/proto_server_reflection.o' failed
make: *** [/home/snoato/Downloads/grpc/objs/opt/src/cpp/ext/proto_server_reflection.o] Error 1

Solution

  • This was an oversight from the time the reflection support was added. This problem shouldn't be there anymore with more recent versions of gRPC, as we are now generating these files at build time.

    My suspicion is that you are trying to build an older version which had the problem. Please try updating :-)