Hi,

I'm trying to build simple test application with Protocol Buffers 2.6.1 and 
GNU GCC 5.1.0 and I get following errors:

/home/ragnar/cpp-tools/gcc-linux/bin/g++   -c  
"/home/ragnar/cpp-projects/gprotobuf_test/main.cpp" -g -O0 -Wall   -o 
./Debug/main.cpp.o -I. 
-I/home/ragnar/cpp-tools/libs/linux64/protobuf/include -I.
/home/ragnar/cpp-tools/gcc-linux/bin/g++   -c  
"/home/ragnar/cpp-projects/gprotobuf_test/messages.pb.cc" -g -O0 -Wall   -o 
./Debug/messages.pb.cc.o -I. 
-I/home/ragnar/cpp-tools/libs/linux64/protobuf/include -I.
/home/ragnar/cpp-tools/gcc-linux/bin/g++  -o ./Debug/gprotobuf_test 
@"gprotobuf_test.txt" -L. 
-L/home/ragnar/cpp-tools/libs/linux64/protobuf/lib  -lprotobuf
./Debug/main.cpp.o: In function 
`google::protobuf::internal::GetEmptyStringAlreadyInited[abi:cxx11]()':
/home/ragnar/cpp-tools/libs/linux64/protobuf/include/google/protobuf/generated_message_util.h:80:
 
undefined reference to 
`google::protobuf::internal::empty_string_[abi:cxx11]'
/home/ragnar/cpp-tools/libs/linux64/protobuf/include/google/protobuf/generated_message_util.h:81:
 
undefined reference to 
`google::protobuf::internal::empty_string_[abi:cxx11]'
./Debug/messages.pb.cc.o: In function 
`protobuf_AssignDesc_messages_2eproto()':
/home/ragnar/cpp-projects/gprotobuf_test/messages.pb.cc:32: undefined 
reference to 
`google::protobuf::DescriptorPool::FindFileByName(std::__cxx11::basic_string<char,
 
std::char_traits<char>, std::allocator<char> > const&) const'
./Debug/messages.pb.cc.o: In function `protobuf_AddDesc_messages_2eproto()':
/home/ragnar/cpp-projects/gprotobuf_test/messages.pb.cc:83: undefined 
reference to 
`google::protobuf::MessageFactory::InternalRegisterGeneratedFile(char 
const*, void (*)(std::__cxx11::basic_string<char, std::char_traits<char>, 
std::allocator<char> > const&))'
./Debug/messages.pb.cc.o: In function 
`my_message::MergePartialFromCodedStream(google::protobuf::io::CodedInputStream*)':
/home/ragnar/cpp-projects/gprotobuf_test/messages.pb.cc:187: undefined 
reference to 
`google::protobuf::internal::WireFormatLite::ReadString(google::protobuf::io::CodedInputStream*,
 
std::__cxx11::basic_string<char, std::char_traits<char>, 
std::allocator<char> >*)'
./Debug/messages.pb.cc.o: In function 
`my_message::SerializeWithCachedSizes(google::protobuf::io::CodedOutputStream*) 
const':
/home/ragnar/cpp-projects/gprotobuf_test/messages.pb.cc:247: undefined 
reference to 
`google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(int, 
std::__cxx11::basic_string<char, std::char_traits<char>, 
std::allocator<char> > const&, google::protobuf::io::CodedOutputStream*)'
./Debug/messages.pb.cc.o: In function 
`google::protobuf::internal::WireFormatLite::WriteStringToArray(int, 
std::__cxx11::basic_string<char, std::char_traits<char>, 
std::allocator<char> > const&, unsigned char*)':
/home/ragnar/cpp-tools/libs/linux64/protobuf/include/google/protobuf/wire_format_lite_inl.h:749:
 
undefined reference to 
`google::protobuf::io::CodedOutputStream::WriteStringWithSizeToArray(std::__cxx11::basic_string<char,
 
std::char_traits<char>, std::allocator<char> > const&, unsigned char*)'
./Debug/messages.pb.cc.o:(.rodata._ZTV10my_message[_ZTV10my_message]+0x20): 
undefined reference to `google::protobuf::Message::GetTypeName[abi:cxx11]() 
const'
./Debug/messages.pb.cc.o:(.rodata._ZTV10my_message[_ZTV10my_message]+0x40): 
undefined reference to 
`google::protobuf::Message::InitializationErrorString[abi:cxx11]() const'
collect2: error: ld returned 1 exit status
gprotobuf_test.mk:93: recipe for target 'Debug/gprotobuf_test' failed
make[1]: *** [Debug/gprotobuf_test] Error 1
make[1]: Leaving directory '/home/ragnar/cpp-projects/gprotobuf_test'
Makefile:4: recipe for target 'All' failed
make: *** [All] Error 2

The /home/ragnar/cpp-tools/libs/linux64/protobuf/lib contains following 
libraries:
libprotobuf.a        
libprotobuf.so.9.0.1  
libprotobuf-lite.a
libprotobuf-lite.so.9.0.1  
libprotoc.a           
libprotoc.so.9.0.1

Here's the simple .proto file:

option java_package = "my.package";

message my_message {
    required string word = 1;
    required uint32 number = 2;
}


and the code I'm trying to get working:

#include <iostream>
#include <vector>

#include <google/protobuf/io/coded_stream.h>
#include <google/protobuf/io/zero_copy_stream_impl.h>
#include "messages.pb.h"

std::vector<unsigned char> encode( google::protobuf::Message & msg )
{
    std::vector<unsigned char> data( msg.ByteSize() + 
google::protobuf::io::CodedOutputStream::VarintSize32( msg.ByteSize() ) );
    google::protobuf::io::ArrayOutputStream array_out( &data[0], 
data.size() );
    google::protobuf::io::CodedOutputStream coded_out( &array_out );
    coded_out.WriteVarint32( msg.ByteSize() );
    msg.SerializeToCodedStream( &coded_out );
    return data;
}

void decode( const std::vector<unsigned char> & data, 
google::protobuf::Message & msg )
{
    google::protobuf::io::ArrayInputStream array_in( &data[0] , data.size() 
);
    google::protobuf::io::CodedInputStream coded_in( &array_in );
    google::protobuf::uint32 size;
    coded_in.ReadVarint32( &size );
    google::protobuf::io::CodedInputStream::Limit msg_limit = 
coded_in.PushLimit( size );
    msg.ParseFromCodedStream( &coded_in );
    coded_in.PopLimit( msg_limit );
}

int main(int argc, char **argv)
{
    my_message in_msg;
    in_msg.set_word( "blah blah" );
    in_msg.set_number( 123 );
    std::vector<unsigned char> data = encode( in_msg );
    
    my_message out_msg;
    decode( data, out_msg );
    std::cout << "word: " << out_msg.word() << " number: " << 
out_msg.number() << std::endl;
    
    return 0;
}


Gcc is built from source with following options: 
--enable-64bit --enable-32bit --enable-languages=c,c++ --enable-multilib 
--disable-nls --enable-threads=posix --enable-checking=release --enable-lto 
--enable-multiarch --with-multilib-list=m32,m64,mx32 --with-tune=generic 
--enable-shared --with-glibc-version=2.13 --enable-libstdcxx-time=rt

And Protobuf is built from source with following options:
--enable-64it --disable-32bit --enable-shared CXXFLAGS=-m64 -DNDEBUG 
LDFLAGS=-m64

Any help would be greatly appreciated 

With Regards,
Ragnar



-- 
You received this message because you are subscribed to the Google Groups 
"Protocol Buffers" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/protobuf.
For more options, visit https://groups.google.com/d/optout.

Reply via email to