我想在XCode中使用Google Protocol Buffers for C ++
这是我拥有库的目录:/Developer/Protobuf
。
我在此目录中所做的是编译.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
.................................................................................
也许我没有正确创建静态库?
答案 0 :(得分:2)
首先,您需要使用其makefile编译Protocol Buffers静态库,然后将静态库链接到您的项目中。你不应该将他们的源代码插入你的Xcode项目。
将库链接到我的项目时,我遇到了与您相同的“未定义符号”错误。基于注释#19 in this discussion,在构建协议缓冲区库时运行以下命令将使它们消失。
$ ./configure CC=clang CXX="clang++ -std=c++11 -stdlib=libc++" CXXFLAGS="-O3" --disable-shared
$ make