1

XCode で C++ 用の Google Protocol Buffers を使用したいと考えています。
これは、ライブラリがある私のディレクトリです: /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.aBuild 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
.................................................................................

多分私は静的ライブラリを正しく作成していませんか?

4

1 に答える 1

3

まず、makefile を使用して Protocol Buffers スタティック ライブラリをコンパイルし、スタティック ライブラリをプロジェクトにリンクする必要があります。ソース コードを Xcode プロジェクトに取り込まないでください。

ライブラリをプロジェクトにリンクすると、あなたと同じ「未定義のシンボル」エラーが発生しました。このディスカッションのコメント #19 に基づいて、Protocol Buffers ライブラリをビルドするときに次のコマンドを実行すると、それらがなくなります。

$ ./configure CC=clang CXX="clang++ -std=c++11 -stdlib=libc++" CXXFLAGS="-O3" --disable-shared
$ make
于 2013-12-10T00:38:12.027 に答える