2013-08-03 58 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

你的答案是否提供了其他答案沒有的新東西?如果是,請說明不同之處。另外,不要在沒有任何解釋的情況下發布命令 –