2

私は自分の内部使用のために独自のポッドを構築しました。pod spec lint は問題なく動作しましたが、実際に使用しようとすると、次のコンパイル エラーが発生しました。

Undefined symbols for architecture armv7:
  "___gxx_personality_sj0", referenced from:
      _GetConvertedData in libPods.a(ExtAudioFileConvert.o)
  "vtable for __cxxabiv1::__class_type_info", referenced from:
      typeinfo for CAXException in libPods.a(ExtAudioFileConvert.o)
  NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
  "std::__throw_bad_alloc()", referenced from:
      std::_Vector_base<AudioBufferList*, std::allocator<AudioBufferList*> >::_M_allocate(unsigned long) in libPods.a(ExtAudioFileConvert.o)
  "CAStreamBasicDescription::CAStreamBasicDescription()", referenced from:
      _GetConvertedData in libPods.a(ExtAudioFileConvert.o)
  "___cxa_allocate_exception", referenced from:
      _GetConvertedData in libPods.a(ExtAudioFileConvert.o)
  "___cxa_throw", referenced from:
      _GetConvertedData in libPods.a(ExtAudioFileConvert.o)
  "operator new[](unsigned long)", referenced from:
      _GetConvertedData in libPods.a(ExtAudioFileConvert.o)
  "___cxa_begin_catch", referenced from:
      _GetConvertedData in libPods.a(ExtAudioFileConvert.o)
  "operator new(unsigned long)", referenced from:
      _GetConvertedData in libPods.a(ExtAudioFileConvert.o)
      std::_Vector_base<AudioBufferList*, std::allocator<AudioBufferList*> >::_M_allocate(unsigned long) in libPods.a(ExtAudioFileConvert.o)
  "std::__throw_length_error(char const*)", referenced from:
      std::vector<AudioBufferList*, std::allocator<AudioBufferList*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<AudioBufferList**, std::vector<AudioBufferList*, std::allocator<AudioBufferList*> > >, AudioBufferList* const&) in libPods.a(ExtAudioFileConvert.o)
  "___cxa_free_exception", referenced from:
      _GetConvertedData in libPods.a(ExtAudioFileConvert.o)
  "_OBJC_CLASS_$_MPMusicPlayerController", referenced from:
      objc-class-ref in libPods.a(AudioManager.o)
  "___cxa_end_catch", referenced from:
      _GetConvertedData in libPods.a(ExtAudioFileConvert.o)
  "std::terminate()", referenced from:
      _GetConvertedData in libPods.a(ExtAudioFileConvert.o)
  "operator delete(void*)", referenced from:
      _GetConvertedData in libPods.a(ExtAudioFileConvert.o)
      std::vector<AudioBufferList*, std::allocator<AudioBufferList*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<AudioBufferList**, std::vector<AudioBufferList*, std::allocator<AudioBufferList*> > >, AudioBufferList* const&) in libPods.a(ExtAudioFileConvert.o)
ld: symbol(s) not found for architecture armv7
clang: error: linker command failed with exit code 1 (use -v to see invocation)

フレームワークが podspec で適切に設定されていないのではないかと思います。これは、作成する最初のポッドであり、おそらくそこにいくつかの間違いがあるためです。

前もって感謝します。

4

1 に答える 1

2

投稿した質問に正式に回答します。それを修正するには、次のことを行う必要がありました。

  • C++ 標準ライブラリをリンクします: (Thanks to @H2CO3)
    • ポッドスペックs.library = 'stdc++'に追加
  • Link MediaPlayer フレームワーク: (Thanks to @H2CO3)
    • ポッドスペックs.frameworks = 'MediaPlayer'に追加
  • CAStreamBasicDescription に関する問題は、 Trouble linking Tim Bolstad の Core Audio Example の回答に従って修正されました。
于 2013-08-26T21:24:01.413 に答える