shaochuan / cmake-protobuf-example

Minimal example of using CMake to manage C++ project with protobuf.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

linkage error : undefined reference google::protobuf::internal::AssignDescriptors

mathben opened this issue · comments

Hi, I open the project with Clion and I obtain this error :

/usr/bin/cmake --build /tmp/cmake-protobuf-example/cmake-build-debug --target main -- -j 4
[ 60%] Built target proto
Scanning dependencies of target main
[ 80%] Building CXX object CMakeFiles/main.dir/main.cpp.o
[100%] Linking CXX executable main
proto/libproto.a(message.pb.cc.o): In function message::protobuf_message_2eproto::(anonymous namespace)::protobuf_AssignDescriptors()': /tmp/cmake-protobuf-example/cmake-build-debug/proto/message.pb.cc:70: undefined reference to google::protobuf::internal::AssignDescriptors(std::__cxx11::basic_string<char, std::char_traits, std::allocator > const&, google::protobuf::internal::MigrationSchema const*, google::protobuf::Message const* const*, unsigned int const*, google::protobuf::MessageFactory*, google::protobuf::Metadata*, google::protobuf::EnumDescriptor const**, google::protobuf::ServiceDescriptor const**)'
proto/libproto.a(message.pb.cc.o): In function message::protobuf_message_2eproto::(anonymous namespace)::protobuf_RegisterTypes(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)': /tmp/cmake-protobuf-example/cmake-build-debug/proto/message.pb.cc:83: undefined reference to google::protobuf::internal::RegisterAllTypes(google::protobuf::Metadata const*, int)'
proto/libproto.a(message.pb.cc.o): In function message::protobuf_message_2eproto::TableStruct::InitDefaultsImpl()': /tmp/cmake-protobuf-example/cmake-build-debug/proto/message.pb.cc:94: undefined reference to google::protobuf::internal::VerifyVersion(int, int, char const*)'
/tmp/cmake-protobuf-example/cmake-build-debug/proto/message.pb.cc:96: undefined reference to google::protobuf::internal::InitProtobufDefaults()' proto/libproto.a(message.pb.cc.o): In function message::protobuf_message_2eproto::AddDescriptorsImpl()':
/tmp/cmake-protobuf-example/cmake-build-debug/proto/message.pb.cc:110: undefined reference to google::protobuf::DescriptorPool::InternalAddGeneratedFile(void const*, int)' /tmp/cmake-protobuf-example/cmake-build-debug/proto/message.pb.cc:112: undefined reference to google::protobuf::MessageFactory::InternalRegisterGeneratedFile(char const*, void ()(std::__cxx11::basic_string<char, std::char_traits, std::allocator > const&))'
/tmp/cmake-protobuf-example/cmake-build-debug/proto/message.pb.cc:114: undefined reference to google::protobuf::internal::OnShutdown(void (*)())' proto/libproto.a(message.pb.cc.o): In function std::pair<unsigned int, bool> google::protobuf::io::CodedInputStream::ReadTagWithCutoffImplementation(unsigned int)':
/usr/include/google/protobuf/io/coded_stream.h:1104: undefined reference to google::protobuf::io::CodedInputStream::ReadTagFallback(unsigned int)' proto/libproto.a(message.pb.cc.o): In function message::Message::MergePartialFromCodedStream(google::protobuf::io::CodedInputStream
)':
/tmp/cmake-protobuf-example/cmake-build-debug/proto/message.pb.cc:232: undefined reference to google::protobuf::internal::WireFormat::SkipField(google::protobuf::io::CodedInputStream*, unsigned int, google::protobuf::UnknownFieldSet*)' proto/libproto.a(message.pb.cc.o): In function message::Message::SerializeWithCachedSizes(google::protobuf::io::CodedOutputStream*) const':
/tmp/cmake-protobuf-example/cmake-build-debug/proto/message.pb.cc:255: undefined reference to google::protobuf::internal::WireFormatLite::WriteInt32(int, int, google::protobuf::io::CodedOutputStream*)' /tmp/cmake-protobuf-example/cmake-build-debug/proto/message.pb.cc:260: undefined reference to google::protobuf::internal::WireFormat::SerializeUnknownFields(google::protobuf::UnknownFieldSet const&, google::protobuf::io::CodedOutputStream*)'
proto/libproto.a(message.pb.cc.o): In function message::Message::InternalSerializeWithCachedSizesToArray(bool, unsigned char*) const': /tmp/cmake-protobuf-example/cmake-build-debug/proto/message.pb.cc:278: undefined reference to google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(google::protobuf::UnknownFieldSet const&, unsigned char*)'
proto/libproto.a(message.pb.cc.o): In function message::Message::ByteSizeLong() const': /tmp/cmake-protobuf-example/cmake-build-debug/proto/message.pb.cc:291: undefined reference to google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(google::protobuf::UnknownFieldSet const&)'
/tmp/cmake-protobuf-example/cmake-build-debug/proto/message.pb.cc:297: undefined reference to google::protobuf::internal::WireFormatLite::Int32Size(google::protobuf::RepeatedField<int> const&)' proto/libproto.a(message.pb.cc.o): In function message::Message::MergeFrom(google::protobuf::Message const&)':
/tmp/cmake-protobuf-example/cmake-build-debug/proto/message.pb.cc:312: undefined reference to google::protobuf::internal::LogMessage::LogMessage(google::protobuf::LogLevel, char const*, int)' /tmp/cmake-protobuf-example/cmake-build-debug/proto/message.pb.cc:312: undefined reference to google::protobuf::internal::LogMessage::operator<<(char const*)'
/tmp/cmake-protobuf-example/cmake-build-debug/proto/message.pb.cc:312: undefined reference to google::protobuf::internal::LogFinisher::operator=(google::protobuf::internal::LogMessage&)' /tmp/cmake-protobuf-example/cmake-build-debug/proto/message.pb.cc:312: undefined reference to google::protobuf::internal::LogMessage::~LogMessage()'
/tmp/cmake-protobuf-example/cmake-build-debug/proto/message.pb.cc:318: undefined reference to google::protobuf::internal::ReflectionOps::Merge(google::protobuf::Message const&, google::protobuf::Message*)' /tmp/cmake-protobuf-example/cmake-build-debug/proto/message.pb.cc:312: undefined reference to google::protobuf::internal::LogMessage::~LogMessage()'
proto/libproto.a(message.pb.cc.o): In function message::Message::MergeFrom(message::Message const&)': /tmp/cmake-protobuf-example/cmake-build-debug/proto/message.pb.cc:327: undefined reference to google::protobuf::internal::LogMessage::LogMessage(google::protobuf::LogLevel, char const*, int)'
/tmp/cmake-protobuf-example/cmake-build-debug/proto/message.pb.cc:327: undefined reference to google::protobuf::internal::LogMessage::operator<<(char const*)' /tmp/cmake-protobuf-example/cmake-build-debug/proto/message.pb.cc:327: undefined reference to google::protobuf::internal::LogFinisher::operator=(google::protobuf::internal::LogMessage&)'
/tmp/cmake-protobuf-example/cmake-build-debug/proto/message.pb.cc:327: undefined reference to google::protobuf::internal::LogMessage::~LogMessage()' /tmp/cmake-protobuf-example/cmake-build-debug/proto/message.pb.cc:327: undefined reference to google::protobuf::internal::LogMessage::~LogMessage()'
proto/libproto.a(message.pb.cc.o): In function google::protobuf::Closure::Closure()': /usr/include/google/protobuf/stubs/callback.h:72: undefined reference to vtable for google::protobuf::Closure'
proto/libproto.a(message.pb.cc.o): In function google::protobuf::internal::FunctionClosure0::FunctionClosure0(void (*)(), bool)': /usr/include/google/protobuf/stubs/callback.h:124: undefined reference to vtable for google::protobuf::internal::FunctionClosure0'
proto/libproto.a(message.pb.cc.o): In function google::protobuf::io::CodedInputStream::ReadVarint32(unsigned int*)': /usr/include/google/protobuf/io/coded_stream.h:929: undefined reference to google::protobuf::io::CodedInputStream::ReadVarint32Fallback(unsigned int)'
proto/libproto.a(message.pb.cc.o): In function google::protobuf::io::CodedInputStream::ReadVarintSizeAsInt(int*)': /usr/include/google/protobuf/io/coded_stream.h:954: undefined reference to google::protobuf::io::CodedInputStream::ReadVarintSizeAsIntFallback()'
proto/libproto.a(message.pb.cc.o): In function google::protobuf::GoogleOnceInit(long*, void (*)())': /usr/include/google/protobuf/stubs/once.h:128: undefined reference to google::protobuf::GoogleOnceInitImpl(long*, google::protobuf::Closure*)'
/usr/include/google/protobuf/stubs/once.h:127: undefined reference to google::protobuf::internal::FunctionClosure0::~FunctionClosure0()' /usr/include/google/protobuf/stubs/once.h:127: undefined reference to google::protobuf::internal::FunctionClosure0::~FunctionClosure0()'
proto/libproto.a(message.pb.cc.o): In function google::protobuf::MessageLite::MessageLite()': /usr/include/google/protobuf/message_lite.h:86: undefined reference to vtable for google::protobuf::MessageLite'
proto/libproto.a(message.pb.cc.o): In function google::protobuf::MessageLite::~MessageLite()': /usr/include/google/protobuf/message_lite.h:87: undefined reference to vtable for google::protobuf::MessageLite'
proto/libproto.a(message.pb.cc.o): In function google::protobuf::UnknownFieldSet::Clear()': /usr/include/google/protobuf/unknown_field_set.h:267: undefined reference to google::protobuf::UnknownFieldSet::ClearFallback()'
proto/libproto.a(message.pb.cc.o): In function google::protobuf::internal::InternalMetadataWithArena::DoMergeFrom(google::protobuf::UnknownFieldSet const&)': /usr/include/google/protobuf/metadata.h:62: undefined reference to google::protobuf::UnknownFieldSet::MergeFrom(google::protobuf::UnknownFieldSet const&)'
proto/libproto.a(message.pb.cc.o): In function google::protobuf::internal::InternalMetadataWithArena::default_instance()': /usr/include/google/protobuf/metadata.h:70: undefined reference to google::protobuf::UnknownFieldSet::default_instance()'
proto/libproto.a(message.pb.cc.o): In function google::protobuf::Message::Message()': /usr/include/google/protobuf/message.h:188: undefined reference to vtable for google::protobuf::Message'
proto/libproto.a(message.pb.cc.o): In function google::protobuf::Message::~Message()': /usr/include/google/protobuf/message.h:189: undefined reference to vtable for google::protobuf::Message'
proto/libproto.a(message.pb.cc.o): In function google::protobuf::RepeatedField<int>::Get(int) const': /usr/include/google/protobuf/repeated_field.h:1141: undefined reference to google::protobuf::internal::LogMessage::LogMessage(google::protobuf::LogLevel, char const*, int)'
/usr/include/google/protobuf/repeated_field.h:1141: undefined reference to google::protobuf::internal::LogMessage::operator<<(char const*)' /usr/include/google/protobuf/repeated_field.h:1141: undefined reference to google::protobuf::internal::LogFinisher::operator=(google::protobuf::internal::LogMessage&)'
/usr/include/google/protobuf/repeated_field.h:1141: undefined reference to google::protobuf::internal::LogMessage::~LogMessage()' /usr/include/google/protobuf/repeated_field.h:1142: undefined reference to google::protobuf::internal::LogMessage::LogMessage(google::protobuf::LogLevel, char const*, int)'
/usr/include/google/protobuf/repeated_field.h:1142: undefined reference to google::protobuf::internal::LogMessage::operator<<(char const*)' /usr/include/google/protobuf/repeated_field.h:1142: undefined reference to google::protobuf::internal::LogFinisher::operator=(google::protobuf::internal::LogMessage&)'
/usr/include/google/protobuf/repeated_field.h:1142: undefined reference to google::protobuf::internal::LogMessage::~LogMessage()' /usr/include/google/protobuf/repeated_field.h:1141: undefined reference to google::protobuf::internal::LogMessage::~LogMessage()'
/usr/include/google/protobuf/repeated_field.h:1142: undefined reference to google::protobuf::internal::LogMessage::~LogMessage()' proto/libproto.a(message.pb.cc.o): In function void google::protobuf::Arena::OwnInternalmessage::Message(message::Message*, google::protobuf::internal::integral_constant<bool, true>)':
/usr/include/google/protobuf/arena.h:853: undefined reference to google::protobuf::Arena::AddListNode(void*, void (*)(void*))' proto/libproto.a(message.pb.cc.o): In function message::Message const* google::protobuf::internal::DynamicCastToGenerated<message::Message const>(google::protobuf::Message const*)':
/usr/include/google/protobuf/generated_message_reflection.h:696: undefined reference to typeinfo for google::protobuf::Message' proto/libproto.a(message.pb.cc.o): In function google::protobuf::RepeatedField::MergeFrom(google::protobuf::RepeatedField const&)':
/usr/include/google/protobuf/repeated_field.h:1206: undefined reference to google::protobuf::internal::LogMessage::LogMessage(google::protobuf::LogLevel, char const*, int)' /usr/include/google/protobuf/repeated_field.h:1206: undefined reference to google::protobuf::internal::LogMessage::operator<<(char const*)'
/usr/include/google/protobuf/repeated_field.h:1206: undefined reference to google::protobuf::internal::LogFinisher::operator=(google::protobuf::internal::LogMessage&)' /usr/include/google/protobuf/repeated_field.h:1206: undefined reference to google::protobuf::internal::LogMessage::~LogMessage()'
/usr/include/google/protobuf/repeated_field.h:1206: undefined reference to google::protobuf::internal::LogMessage::~LogMessage()' proto/libproto.a(message.pb.cc.o): In function google::protobuf::RepeatedField::InternalSwap(google::protobuf::RepeatedField)':
/usr/include/google/protobuf/repeated_field.h:1256: undefined reference to google::protobuf::internal::LogMessage::LogMessage(google::protobuf::LogLevel, char const*, int)' /usr/include/google/protobuf/repeated_field.h:1256: undefined reference to google::protobuf::internal::LogMessage::operator<<(char const
)'
/usr/include/google/protobuf/repeated_field.h:1256: undefined reference to google::protobuf::internal::LogFinisher::operator=(google::protobuf::internal::LogMessage&)' /usr/include/google/protobuf/repeated_field.h:1256: undefined reference to google::protobuf::internal::LogMessage::~LogMessage()'
/usr/include/google/protobuf/repeated_field.h:1257: undefined reference to google::protobuf::internal::LogMessage::LogMessage(google::protobuf::LogLevel, char const*, int)' /usr/include/google/protobuf/repeated_field.h:1257: undefined reference to google::protobuf::internal::LogMessage::operator<<(char const*)'
/usr/include/google/protobuf/repeated_field.h:1257: undefined reference to google::protobuf::internal::LogFinisher::operator=(google::protobuf::internal::LogMessage&)' /usr/include/google/protobuf/repeated_field.h:1257: undefined reference to google::protobuf::internal::LogMessage::~LogMessage()'
/usr/include/google/protobuf/repeated_field.h:1256: undefined reference to google::protobuf::internal::LogMessage::~LogMessage()' /usr/include/google/protobuf/repeated_field.h:1257: undefined reference to google::protobuf::internal::LogMessage::~LogMessage()'
proto/libproto.a(message.pb.cc.o): In function google::protobuf::internal::InternalMetadataWithArenaBase<google::protobuf::UnknownFieldSet, google::protobuf::internal::InternalMetadataWithArena>::Container* google::protobuf::Arena::CreateInternal<google::protobuf::internal::InternalMetadataWithArenaBase<google::protobuf::UnknownFieldSet, google::protobuf::internal::InternalMetadataWithArena>::Container>(bool)': /usr/include/google/protobuf/arena.h:671: undefined reference to google::protobuf::Arena::AllocateAligned(std::type_info const*, unsigned long)'
/usr/include/google/protobuf/arena.h:673: undefined reference to google::protobuf::Arena::AddListNode(void*, void (*)(void*))' proto/libproto.a(message.pb.cc.o): In function google::protobuf::RepeatedField::Reserve(int)':
/usr/include/google/protobuf/repeated_field.h:1334: undefined reference to google::protobuf::internal::LogMessage::LogMessage(google::protobuf::LogLevel, char const*, int)' /usr/include/google/protobuf/repeated_field.h:1334: undefined reference to google::protobuf::internal::LogMessage::operator<<(char const*)'
/usr/include/google/protobuf/repeated_field.h:1334: undefined reference to google::protobuf::internal::LogMessage::operator<<(char const*)' /usr/include/google/protobuf/repeated_field.h:1334: undefined reference to google::protobuf::internal::LogFinisher::operator=(google::protobuf::internal::LogMessage&)'
/usr/include/google/protobuf/repeated_field.h:1334: undefined reference to google::protobuf::internal::LogMessage::~LogMessage()' proto/libproto.a(message.pb.cc.o): In function char* google::protobuf::Arena::CreateArray(google::protobuf::Arena*, unsigned long)':
/usr/include/google/protobuf/arena.h:453: undefined reference to google::protobuf::internal::LogMessage::LogMessage(google::protobuf::LogLevel, char const*, int)' /usr/include/google/protobuf/arena.h:453: undefined reference to google::protobuf::internal::LogMessage::operator<<(char const*)'
/usr/include/google/protobuf/arena.h:453: undefined reference to google::protobuf::internal::LogMessage::operator<<(char const*)' /usr/include/google/protobuf/arena.h:453: undefined reference to google::protobuf::internal::LogFinisher::operator=(google::protobuf::internal::LogMessage&)'
/usr/include/google/protobuf/arena.h:453: undefined reference to google::protobuf::internal::LogMessage::~LogMessage()' proto/libproto.a(message.pb.cc.o): In function char* google::protobuf::Arena::CreateInternalRawArray(unsigned long)':
/usr/include/google/protobuf/arena.h:651: undefined reference to google::protobuf::internal::LogMessage::LogMessage(google::protobuf::LogLevel, char const*, int)' /usr/include/google/protobuf/arena.h:651: undefined reference to google::protobuf::internal::LogMessage::operator<<(char const*)'
/usr/include/google/protobuf/arena.h:651: undefined reference to google::protobuf::internal::LogMessage::operator<<(char const*)' /usr/include/google/protobuf/arena.h:651: undefined reference to google::protobuf::internal::LogFinisher::operator=(google::protobuf::internal::LogMessage&)'
/usr/include/google/protobuf/arena.h:651: undefined reference to google::protobuf::internal::LogMessage::~LogMessage()' /usr/include/google/protobuf/arena.h:655: undefined reference to google::protobuf::Arena::AllocateAligned(std::type_info const*, unsigned long)'
/usr/include/google/protobuf/arena.h:651: undefined reference to google::protobuf::internal::LogMessage::~LogMessage()' proto/libproto.a(message.pb.cc.o): In function char* google::protobuf::Arena::CreateArray(google::protobuf::Arena*, unsigned long)':
/usr/include/google/protobuf/arena.h:453: undefined reference to google::protobuf::internal::LogMessage::~LogMessage()' proto/libproto.a(message.pb.cc.o): In function google::protobuf::RepeatedField::Reserve(int)':
/usr/include/google/protobuf/repeated_field.h:1334: undefined reference to google::protobuf::internal::LogMessage::~LogMessage()' proto/libproto.a(message.pb.cc.o): In function google::protobuf::RepeatedField::AddAlreadyReserved(int const&)':
/usr/include/google/protobuf/repeated_field.h:1110: undefined reference to google::protobuf::internal::LogMessage::LogMessage(google::protobuf::LogLevel, char const*, int)' /usr/include/google/protobuf/repeated_field.h:1110: undefined reference to google::protobuf::internal::LogMessage::operator<<(char const*)'
/usr/include/google/protobuf/repeated_field.h:1110: undefined reference to google::protobuf::internal::LogFinisher::operator=(google::protobuf::internal::LogMessage&)' /usr/include/google/protobuf/repeated_field.h:1110: undefined reference to google::protobuf::internal::LogMessage::~LogMessage()'
/usr/include/google/protobuf/repeated_field.h:1110: undefined reference to google::protobuf::internal::LogMessage::~LogMessage()' proto/libproto.a(message.pb.cc.o): In function google::protobuf::RepeatedField::unsafe_data() const':
/usr/include/google/protobuf/repeated_field.h:1250: undefined reference to google::protobuf::internal::LogMessage::LogMessage(google::protobuf::LogLevel, char const*, int)' /usr/include/google/protobuf/repeated_field.h:1250: undefined reference to google::protobuf::internal::LogMessage::operator<<(char const*)'
/usr/include/google/protobuf/repeated_field.h:1250: undefined reference to google::protobuf::internal::LogFinisher::operator=(google::protobuf::internal::LogMessage&)' /usr/include/google/protobuf/repeated_field.h:1250: undefined reference to google::protobuf::internal::LogMessage::~LogMessage()'
/usr/include/google/protobuf/repeated_field.h:1250: undefined reference to google::protobuf::internal::LogMessage::~LogMessage()' proto/libproto.a(message.pb.cc.o): In function bool google::protobuf::internal::WireFormatLite::ReadPackedPrimitive<int, (google::protobuf::internal::WireFormatLite::FieldType)5>(google::protobuf::io::CodedInputStream*, google::protobuf::RepeatedField*)':
/usr/include/google/protobuf/wire_format_lite_inl.h:331: undefined reference to google::protobuf::io::CodedInputStream::PushLimit(int)' /usr/include/google/protobuf/wire_format_lite_inl.h:332: undefined reference to google::protobuf::io::CodedInputStream::BytesUntilLimit() const'
/usr/include/google/protobuf/wire_format_lite_inl.h:337: undefined reference to google::protobuf::io::CodedInputStream::PopLimit(int)' proto/libproto.a(message.pb.cc.o):(.data.rel.ro._ZTVN7message7MessageE[_ZTVN7message7MessageE]+0x20): undefined reference to google::protobuf::Message::GetTypeNameabi:cxx11 const'
proto/libproto.a(message.pb.cc.o):(.data.rel.ro._ZTVN7message7MessageE[_ZTVN7message7MessageE]+0x58): undefined reference to google::protobuf::Message::InitializationErrorString[abi:cxx11]() const' proto/libproto.a(message.pb.cc.o):(.data.rel.ro._ZTVN7message7MessageE[_ZTVN7message7MessageE]+0x60): undefined reference to google::protobuf::Message::CheckTypeAndMergeFrom(google::protobuf::MessageLite const&)'
proto/libproto.a(message.pb.cc.o):(.data.rel.ro._ZTVN7message7MessageE[_ZTVN7message7MessageE]+0x80): undefined reference to google::protobuf::MessageLite::SerializeWithCachedSizesToArray(unsigned char*) const' proto/libproto.a(message.pb.cc.o):(.data.rel.ro._ZTVN7message7MessageE[_ZTVN7message7MessageE]+0xa8): undefined reference to google::protobuf::Message::DiscardUnknownFields()'
proto/libproto.a(message.pb.cc.o):(.data.rel.ro._ZTVN7message7MessageE[_ZTVN7message7MessageE]+0xb0): undefined reference to google::protobuf::Message::SpaceUsedLong() const' proto/libproto.a(message.pb.cc.o):(.data.rel.ro._ZTIN7message7MessageE[_ZTIN7message7MessageE]+0x10): undefined reference to typeinfo for google::protobuf::Message'
collect2: error: ld returned 1 exit status
make[3]: *** [CMakeFiles/main.dir/build.make:96: main] Error 1
make[2]: *** [CMakeFiles/Makefile2:68: CMakeFiles/main.dir/all] Error 2
make[1]: *** [CMakeFiles/Makefile2:80: CMakeFiles/main.dir/rule] Error 2
make: *** [Makefile:118: main] Error 2

I have the same error when I run it manually in cli.
My protobuf version : 3.3.2

I find the solution, to fix it, add the next line in file proto/CMakeLists.txt at the end
target_link_libraries(proto ${PROTOBUF_LIBRARIES})