The .pb.h file compares the version of protoc that generated it against GOOGLE_PROTOBUF_MIN_PROTOC_VERSION, which is #defined in google/protobuf/stubs/common.h. We have never released a version in which this value was more than 2003000, which corresponds to protoc 2.3.0, so I can't imagine why you're getting the error. Please investigate yourself and let us know if you figure it out.
BTW, there's a good chance that "pkg-config --cflags --libs protobuf" is not producing the correct flags since you did not install to the standard location (pkg-config probably does not know to look in /meda/EXTDIV for package definitions). However, even so, I don't understand why you'd get the error you're getting. On Wed, Feb 3, 2010 at 11:12 AM, hap 497 <hap...@gmail.com> wrote: > Thanks. No, I have not installed any other version of protoc. > > But I have installed not in my '/usr/etc' directory, I instead in > /meda/EXTDIV/bin', I am not sure if that is a problem. And I am using > ubuntu 9.10 which has gcc 4.4. > > > On Wed, Feb 3, 2010 at 10:35 AM, Kenton Varda <ken...@google.com> wrote: > > Did you previously compile the examples with an older protoc? You need > to > > "make clean" before trying to compile with a newer protoc. > > > > On Wed, Feb 3, 2010 at 9:18 AM, hap 497 <hap...@gmail.com> wrote: > >> > >> Kenton, > >> > >> Thank you. > >> > >> It prints 'libprotoc 2.3.0'. And I have setup my LD_LIBRARY_PATH, > >> PATH, PKG_CONFIG_PATH on my ubuntu env accordingly. > >> > >> $ protoc --version > >> libprotoc 2.3.0 > >> /media/EXTDIV/src/protobuf-2.3.0/examples:1014:14$ make cpp > >> pkg-config --cflags protobuf # fails if protobuf is not installed > >> -pthread -I/media/EXTDIV/bin/include > >> c++ add_person.cc addressbook.pb.cc -o add_person_cpp `pkg-config > >> --cflags --libs protobuf` > >> In file included from add_person.cc:6: > >> addressbook.pb.h:16:2: error: #error This file was generated by an > >> older version of protoc which is > >> addressbook.pb.h:17:2: error: #error incompatible with your Protocol > >> Buffer headers. Please > >> addressbook.pb.h:18:2: error: #error regenerate this file with a newer > >> version of protoc. > >> add_person.cc: In function ‘int main(int, char**)’: > >> add_person.cc:66: error: cannot declare variable ‘address_book’ to be > >> of abstract type ‘tutorial::AddressBook’ > >> addressbook.pb.h:246: note: because the following virtual functions > >> are pure within ‘tutorial::AddressBook’: > >> /media/EXTDIV/bin/include/google/protobuf/message.h:331: note: > >> virtual google::protobuf::Metadata > >> google::protobuf::Message::GetMetadata() const > >> In file included from > >> /media/EXTDIV/bin/include/google/protobuf/unknown_field_set.h:43, > >> from > >> > >> > /media/EXTDIV/bin/include/google/protobuf/generated_message_reflection.h:44, > >> from addressbook.pb.h:21, > >> from add_person.cc:6: > >> /media/EXTDIV/bin/include/google/protobuf/repeated_field.h: In static > >> member function ‘static GenericType* > >> google::protobuf::internal::GenericTypeHandler<GenericType>::New() > >> [with GenericType = tutorial::Person_PhoneNumber]’: > >> /media/EXTDIV/bin/include/google/protobuf/repeated_field.h:655: > >> instantiated from ‘typename TypeHandler::Type* > >> google::protobuf::internal::RepeatedPtrFieldBase::Add() [with > >> TypeHandler = > >> > google::protobuf::RepeatedPtrField<tutorial::Person_PhoneNumber>::TypeHandler]’ > >> /media/EXTDIV/bin/include/google/protobuf/repeated_field.h:829: > >> instantiated from ‘Element* > >> google::protobuf::RepeatedPtrField<Element>::Add() [with Element = > >> tutorial::Person_PhoneNumber]’ > >> addressbook.pb.h:491: instantiated from here > >> /media/EXTDIV/bin/include/google/protobuf/repeated_field.h:271: error: > >> cannot allocate an object of abstract type > >> ‘tutorial::Person_PhoneNumber’ > >> addressbook.pb.h:48: note: because the following virtual functions > >> are pure within ‘tutorial::Person_PhoneNumber’: > >> /media/EXTDIV/bin/include/google/protobuf/message.h:331: note: > >> virtual google::protobuf::Metadata > >> google::protobuf::Message::GetMetadata() const > >> /media/EXTDIV/bin/include/google/protobuf/repeated_field.h: In static > >> member function ‘static GenericType* > >> google::protobuf::internal::GenericTypeHandler<GenericType>::New() > >> [with GenericType = tutorial::Person]’: > >> /media/EXTDIV/bin/include/google/protobuf/repeated_field.h:655: > >> instantiated from ‘typename TypeHandler::Type* > >> google::protobuf::internal::RepeatedPtrFieldBase::Add() [with > >> TypeHandler = > >> google::protobuf::RepeatedPtrField<tutorial::Person>::TypeHandler]’ > >> /media/EXTDIV/bin/include/google/protobuf/repeated_field.h:829: > >> instantiated from ‘Element* > >> google::protobuf::RepeatedPtrField<Element>::Add() [with Element = > >> tutorial::Person]’ > >> addressbook.pb.h:520: instantiated from here > >> /media/EXTDIV/bin/include/google/protobuf/repeated_field.h:271: error: > >> cannot allocate an object of abstract type ‘tutorial::Person’ > >> addressbook.pb.h:128: note: because the following virtual functions > >> are pure within ‘tutorial::Person’: > >> /media/EXTDIV/bin/include/google/protobuf/message.h:331: note: > >> virtual google::protobuf::Metadata > >> google::protobuf::Message::GetMetadata() const > >> In file included from addressbook.pb.cc:3: > >> addressbook.pb.h:16:2: error: #error This file was generated by an > >> older version of protoc which is > >> addressbook.pb.h:17:2: error: #error incompatible with your Protocol > >> Buffer headers. Please > >> addressbook.pb.h:18:2: error: #error regenerate this file with a newer > >> version of protoc. > >> addressbook.pb.cc:7:45: error: google/protobuf/wire_format_inl.h: No > >> such file or directory > >> addressbook.pb.cc: In function ‘void > >> > >> > tutorial::protobuf_BuildDesc_addressbook_2eproto_AssignGlobalDescriptors(const > >> google::protobuf::FileDescriptor*)’: > >> addressbook.pb.cc:29: error: cannot allocate an object of abstract > >> type ‘tutorial::Person’ > >> addressbook.pb.h:128: note: because the following virtual functions > >> are pure within ‘tutorial::Person’: > >> /media/EXTDIV/bin/include/google/protobuf/message.h:331: note: > >> virtual google::protobuf::Metadata > >> google::protobuf::Message::GetMetadata() const > >> addressbook.pb.cc:45: error: no matching function for call to > >> > >> > ‘google::protobuf::internal::GeneratedMessageReflection::GeneratedMessageReflection(const > >> google::protobuf::Descriptor*&, tutorial::Person*&, const int [4], > >> int, int, int, const google::protobuf::DescriptorPool*, unsigned int)’ > >> > >> > /media/EXTDIV/bin/include/google/protobuf/generated_message_reflection.h:344: > >> note: candidates are: > >> > >> > google::protobuf::internal::GeneratedMessageReflection::GeneratedMessageReflection(const > >> google::protobuf::internal::GeneratedMessageReflection&) > >> > >> > /media/EXTDIV/bin/include/google/protobuf/generated_message_reflection.h:122: > >> note: > >> > >> > google::protobuf::internal::GeneratedMessageReflection::GeneratedMessageReflection(const > >> google::protobuf::Descriptor*, const google::protobuf::Message*, const > >> int*, int, int, int, const google::protobuf::DescriptorPool*, > >> google::protobuf::MessageFactory*, int) > >> addressbook.pb.cc:47: error: cannot allocate an object of abstract > >> type ‘tutorial::Person_PhoneNumber’ > >> addressbook.pb.h:48: note: because the following virtual functions > >> are pure within ‘tutorial::Person_PhoneNumber’: > >> /media/EXTDIV/bin/include/google/protobuf/message.h:331: note: > >> virtual google::protobuf::Metadata > >> google::protobuf::Message::GetMetadata() const > >> addressbook.pb.cc:61: error: no matching function for call to > >> > >> > ‘google::protobuf::internal::GeneratedMessageReflection::GeneratedMessageReflection(const > >> google::protobuf::Descriptor*&, tutorial::Person_PhoneNumber*&, const > >> int [2], int, int, int, const google::protobuf::DescriptorPool*, > >> unsigned int)’ > >> > >> > /media/EXTDIV/bin/include/google/protobuf/generated_message_reflection.h:344: > >> note: candidates are: > >> > >> > google::protobuf::internal::GeneratedMessageReflection::GeneratedMessageReflection(const > >> google::protobuf::internal::GeneratedMessageReflection&) > >> > >> > /media/EXTDIV/bin/include/google/protobuf/generated_message_reflection.h:122: > >> note: > >> > >> > google::protobuf::internal::GeneratedMessageReflection::GeneratedMessageReflection(const > >> google::protobuf::Descriptor*, const google::protobuf::Message*, const > >> int*, int, int, int, const google::protobuf::DescriptorPool*, > >> google::protobuf::MessageFactory*, int) > >> addressbook.pb.cc:68: error: cannot allocate an object of abstract > >> type ‘tutorial::AddressBook’ > >> addressbook.pb.h:246: note: because the following virtual functions > >> are pure within ‘tutorial::AddressBook’: > >> /media/EXTDIV/bin/include/google/protobuf/message.h:331: note: > >> virtual google::protobuf::Metadata > >> google::protobuf::Message::GetMetadata() const > >> addressbook.pb.cc:81: error: no matching function for call to > >> > >> > ‘google::protobuf::internal::GeneratedMessageReflection::GeneratedMessageReflection(const > >> google::protobuf::Descriptor*&, tutorial::AddressBook*&, const int > >> [1], int, int, int, const google::protobuf::DescriptorPool*, unsigned > >> int)’ > >> > >> > /media/EXTDIV/bin/include/google/protobuf/generated_message_reflection.h:344: > >> note: candidates are: > >> > >> > google::protobuf::internal::GeneratedMessageReflection::GeneratedMessageReflection(const > >> google::protobuf::internal::GeneratedMessageReflection&) > >> > >> > /media/EXTDIV/bin/include/google/protobuf/generated_message_reflection.h:122: > >> note: > >> > >> > google::protobuf::internal::GeneratedMessageReflection::GeneratedMessageReflection(const > >> google::protobuf::Descriptor*, const google::protobuf::Message*, const > >> int*, int, int, int, const google::protobuf::DescriptorPool*, > >> google::protobuf::MessageFactory*, int) > >> addressbook.pb.cc: In function ‘void > >> tutorial::protobuf_BuildDesc_addressbook_2eproto()’: > >> addressbook.pb.cc:97: error: ‘class google::protobuf::DescriptorPool’ > >> has no member named ‘InternalBuildGeneratedFile’ > >> addressbook.pb.cc: In member function ‘virtual > >> tutorial::Person_PhoneNumber* tutorial::Person_PhoneNumber::New() > >> const’: > >> addressbook.pb.cc:184: error: cannot allocate an object of abstract > >> type ‘tutorial::Person_PhoneNumber’ > >> addressbook.pb.h:48: note: since type ‘tutorial::Person_PhoneNumber’ > >> has pure virtual functions > >> addressbook.pb.cc: In member function ‘virtual tutorial::Person* > >> tutorial::Person::New() const’: > >> addressbook.pb.cc:247: error: cannot allocate an object of abstract > >> type ‘tutorial::Person’ > >> addressbook.pb.h:128: note: since type ‘tutorial::Person’ has pure > >> virtual functions > >> addressbook.pb.cc: In member function ‘virtual tutorial::AddressBook* > >> tutorial::AddressBook::New() const’: > >> addressbook.pb.cc:295: error: cannot allocate an object of abstract > >> type ‘tutorial::AddressBook’ > >> addressbook.pb.h:246: note: since type ‘tutorial::AddressBook’ has > >> pure virtual functions > >> In file included from > >> /media/EXTDIV/bin/include/google/protobuf/unknown_field_set.h:43, > >> from > >> > >> > /media/EXTDIV/bin/include/google/protobuf/generated_message_reflection.h:44, > >> from addressbook.pb.h:21, > >> from addressbook.pb.cc:3: > >> /media/EXTDIV/bin/include/google/protobuf/repeated_field.h: In static > >> member function ‘static GenericType* > >> google::protobuf::internal::GenericTypeHandler<GenericType>::New() > >> [with GenericType = tutorial::Person_PhoneNumber]’: > >> /media/EXTDIV/bin/include/google/protobuf/repeated_field.h:655: > >> instantiated from ‘typename TypeHandler::Type* > >> google::protobuf::internal::RepeatedPtrFieldBase::Add() [with > >> TypeHandler = > >> > google::protobuf::RepeatedPtrField<tutorial::Person_PhoneNumber>::TypeHandler]’ > >> /media/EXTDIV/bin/include/google/protobuf/repeated_field.h:829: > >> instantiated from ‘Element* > >> google::protobuf::RepeatedPtrField<Element>::Add() [with Element = > >> tutorial::Person_PhoneNumber]’ > >> addressbook.pb.h:491: instantiated from here > >> /media/EXTDIV/bin/include/google/protobuf/repeated_field.h:271: error: > >> cannot allocate an object of abstract type > >> ‘tutorial::Person_PhoneNumber’ > >> addressbook.pb.h:48: note: since type ‘tutorial::Person_PhoneNumber’ > >> has pure virtual functions > >> /media/EXTDIV/bin/include/google/protobuf/repeated_field.h: In static > >> member function ‘static GenericType* > >> google::protobuf::internal::GenericTypeHandler<GenericType>::New() > >> [with GenericType = tutorial::Person]’: > >> /media/EXTDIV/bin/include/google/protobuf/repeated_field.h:655: > >> instantiated from ‘typename TypeHandler::Type* > >> google::protobuf::internal::RepeatedPtrFieldBase::Add() [with > >> TypeHandler = > >> google::protobuf::RepeatedPtrField<tutorial::Person>::TypeHandler]’ > >> /media/EXTDIV/bin/include/google/protobuf/repeated_field.h:829: > >> instantiated from ‘Element* > >> google::protobuf::RepeatedPtrField<Element>::Add() [with Element = > >> tutorial::Person]’ > >> addressbook.pb.h:520: instantiated from here > >> /media/EXTDIV/bin/include/google/protobuf/repeated_field.h:271: error: > >> cannot allocate an object of abstract type ‘tutorial::Person’ > >> addressbook.pb.h:128: note: since type ‘tutorial::Person’ has pure > >> virtual functions > >> make: *** [add_person_cpp] Error 1 > >> /media/EXTDIV/src/protobuf-2.3.0/examples:1015:15$ > >> > >> On Tue, Feb 2, 2010 at 1:38 PM, Kenton Varda <ken...@google.com> wrote: > >> > What does "protoc --version" print? > >> > > >> > On Tue, Feb 2, 2010 at 10:31 AM, hap 497 <hap...@gmail.com> wrote: > >> >> > >> >> Hi, > >> >> > >> >> I am trying to compile protobuf cpp example. > >> >> $ cd /media/EXTDIV/src/protobuf-2.3.0/examples > >> >> $ make cpp > >> >> > >> >> But I am getting these errors: > >> >> c++ add_person.cc addressbook.pb.cc -o add_person_cpp `pkg-config > >> >> --cflags --libs protobuf` > >> >> In file included from add_person.cc:6: > >> >> addressbook.pb.h:16:2: error: #error This file was generated by an > >> >> older version of protoc which is > >> >> addressbook.pb.h:17:2: error: #error incompatible with your Protocol > >> >> Buffer headers. Please > >> >> addressbook.pb.h:18:2: error: #error regenerate this file with a > newer > >> >> version of protoc. > >> >> add_person.cc: In function ‘int main(int, char**)’: > >> >> add_person.cc:66: error: cannot declare variable ‘address_book’ to be > >> >> of abstract type ‘tutorial::AddressBook’ > >> >> addressbook.pb.h:246: note: because the following virtual functions > >> >> are pure within ‘tutorial::AddressBook’: > >> >> > >> >> I downnload the source tar ball 2.3.0 on Ubuntu. Is that out of date? > >> >> > >> >> Thank you. > >> >> > >> >> -- > >> >> You received this message because you are subscribed to the Google > >> >> Groups > >> >> "Protocol Buffers" group. > >> >> To post to this group, send email to proto...@googlegroups.com. > >> >> To unsubscribe from this group, send email to > >> >> protobuf+unsubscr...@googlegroups.com<protobuf%2bunsubscr...@googlegroups.com> > . > >> >> For more options, visit this group at > >> >> http://groups.google.com/group/protobuf?hl=en. > >> >> > >> > > >> > -- > >> > You received this message because you are subscribed to the Google > >> > Groups > >> > "Protocol Buffers" group. > >> > To post to this group, send email to proto...@googlegroups.com. > >> > To unsubscribe from this group, send email to > >> > protobuf+unsubscr...@googlegroups.com<protobuf%2bunsubscr...@googlegroups.com> > . > >> > For more options, visit this group at > >> > http://groups.google.com/group/protobuf?hl=en. > >> > > > > > > -- You received this message because you are subscribed to the Google Groups "Protocol Buffers" group. To post to this group, send email to proto...@googlegroups.com. To unsubscribe from this group, send email to protobuf+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/protobuf?hl=en.