You don't appear to include the path to protobuf when compiling
user.pb.o -- there's no explicit rule so it'll just $(CXXFLAGS). You
should either add

%.pb.o: %.pb.cc
    $(CC) $(CXXFLAGS) $(pkgconfig --cflags protobuf) -o $@ $^

Or add CXXFLAGS = $(pkgconfig --cflags protobuf) at the top, which
will make it add the include path everywhere. (I note you're using
CFLAGS... afaik that doesn't get used by the default c++ compilation
rule. Take a look at the commands make prints out and make sure
they're what you'd expect.) Also you'll need this when compiling
hello_protobuf.o, since it also needs the protobuf library.

If the above doesn't explain the issue, you might paste the whole
output from make which will include the actual commands being run.

  -ilia

On Wed, Feb 27, 2013 at 4:01 PM, Mohammad Husain <farhan1...@hotmail.com> wrote:
> 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.
>
>

-- 
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