2013-08-03 19 views
1

我想在XCode中使用Google Protocol Buffers for C++。
这是我有图书馆的目录:/Developer/Protobuf在XCode中链接协议缓冲区库

我在这个目录里面做了什么,编译了.proto并生成了.pb.h &。 pb.cc文件。在此之后产生的目标文件:

clang++ -arch x86_64 -I./src -I./ -c file.pb.cc 

然后:

ar -r file.pb.a file.pb.o 

在Xcode中,在Build Phases -> Link Binary With Libraries我已经加入file.pb.a静态库。在Build Settings -> Header Search Paths我已添加/Developer/Protobuf/src。在Build Settings -> Librabry Search Paths我已添加/Developer/Protobuf。在Build Settings -> User Header Search Paths我也加了/Developer/Protobuf/src

但是,当我编译了该项目,我总是得到这样的错误:

Undefined symbols for architecture x86_64: 
    "google::protobuf::DescriptorPool::generated_pool()", referenced from: 
     musicbrainz::protobuf_AssignDesc_musicbrainz_2eproto() in musicbrainz.pb.o 
    "google::protobuf::DescriptorPool::InternalAddGeneratedFile(void const*, int)", referenced from: 
     musicbrainz::protobuf_AddDesc_musicbrainz_2eproto() in musicbrainz.pb.o 
    "google::protobuf::MessageFactory::generated_factory()", referenced from: 
     musicbrainz::protobuf_AssignDesc_musicbrainz_2eproto() in musicbrainz.pb.o 
    "google::protobuf::MessageFactory::InternalRegisterGeneratedFile(char const*, void (*)(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&))", referenced from: 
     musicbrainz::protobuf_AddDesc_musicbrainz_2eproto() in musicbrainz.pb.o 
................................................................................. 

也许我没有创建静态库是否正确?

回答

2

首先,您需要使用它们的makefile编译Protocol Buffers静态库,然后将静态库链接到您的项目中。你不应该把它们的源代码放到你的Xcode项目中。

将库链接到我的项目中时,我的错误与您的“未定义符号”相同。基于注释#19 in this discussion,在构建Protocol Buffers库时运行以下命令将使它们消失。

$ ./configure CC=clang CXX="clang++ -std=c++11 -stdlib=libc++" CXXFLAGS="-O3" --disable-shared 
$ make 
+0

仍然得到同样的错误上MAC为protobuf的-2.4 .1 –

-2

铛++ -g -I/USR /本地/包含/ -L/USR /本地/ lib中-lprotobuf file.pb.cc

+0

你的答案是否提供了其他答案没有的新东西?如果是,请说明不同之处。另外,不要在没有任何解释的情况下发布命令 –