I am having a bizarre linker problem with the simple program I wrote with 
protobuf. When I run the make command I see tons of linker errors like the 
following:

user.pb.o:(.rodata._ZTIN4misc4UserE[_ZTIN4misc4UserE]+0x10): undefined 
reference to `typeinfo for google::protobuf::Message'
user.pb.o:(.rodata._ZTIN4misc13User_FullNameE[_ZTIN4misc13User_FullNameE]+0x0): 
undefined reference to `vtable for __cxxabiv1::__si_class_type_info'
user.pb.o:(.rodata._ZTIN4misc13User_FullNameE[_ZTIN4misc13User_FullNameE]+0x10):
 
undefined reference to `typeinfo for google::protobuf::Message'
user.pb.o:(.eh_frame+0x38b): undefined reference to `__gxx_personality_v0'
collect2: error: ld returned 1 exit status
make: *** [hello_protobuf] Error 1

However, the C++ example in the protobuf package builds and runs fine. Here 
is the output of the pkgconfig command:

$ pkg-config --cflags --libs protobuf
-pthread -I/usr/local/include  -pthread -L/usr/local/lib -lprotobuf -lz 
-lpthread  
$ protoc --version
libprotoc 2.4.1
I am using version 2.4.1. I believe something is wrong with my Makefile. 
Can anyone help?

I tried to attach the source and Makefile but probably attachment is 
disabled in the group. Here are my file contents:

<user.proto>
package misc;

message User {
    required string username = 1;
    required int32 id = 2;
    optional string email = 3;

    message FullName {
        required string firstName = 1;
        optional string middleName = 2;
        required string lastName = 3;
    }

    optional FullName fullName = 4;;
}
</user.proto>

<hello_protobuf.cpp>
#include <iostream>
#include "user.pb.h"

int main(int argc, char **argv) {
    misc::User u;

    u.set_username("username");
    u.set_id(1);

    std::cout << "Username: " << u.username() << " and ID: " << u.id() << 
std::endl;

    return 0;
}
</hello_protobuf.cpp>

<Makefile>
all: hello_protobuf

CC = g++
DEBUG = -g
LIBS = `pkg-config --cflags --libs protobuf`
CFLAGS = -Wall $(DEBUG)
LFLAGS = -Wall $(DEBUG) $(LIBS)

protoc_middleman: user.proto
    protoc --cpp_out=. user.proto
    @touch protoc_middleman

OBJS = hello_protobuf.o user.pb.o

hello_protobuf: $(OBJS) protoc_middleman
    pkg-config --cflags protobuf  # fails if protobuf is not installed
    $(CC) $(LFLAGS) $(OBJS) -o hello_protobuf

clean:
    \rm *.o hello_protobuf
</Makefile>

-- 
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 protobuf+unsubscr...@googlegroups.com.
To post to this group, send email to protobuf@googlegroups.com.
Visit this group at http://groups.google.com/group/protobuf?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to