ios - 使用自定义 cocoapod 会出现编译错误(架构 armv7 的 undefined symbol :)

标签 ios xcode cocoapods

我构建了自己的 Pod 供自己内部使用。 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 中的框架设置不正确,因为这是我编写的第一个 pod,其中可能存在一些错误。

提前致谢。

最佳答案

正式回答我发布的问题。我需要执行以下操作来修复它:

  • 链接C++标准库:(感谢@H2CO3)
    • s.library = 'stdc++' 添加到 podspec
  • 链接MediaPlayer框架:(感谢@H2CO3)
    • s.frameworks = 'MediaPlayer' 添加到 podspec
  • CAStreamBasicDescription 问题已按照以下答案修复:Trouble linking Tim Bolstad's Core Audio Example

关于ios - 使用自定义 cocoapod 会出现编译错误(架构 armv7 的 undefined symbol :),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18451740/

相关文章:

ios - 我正在使用 xcode 生成 ipa 文件,但它没有安装 iphone 设备?

objective-c - 嵌套 block 和对自身的引用

iOS 9 和 Siri 的智能提醒

swift - 运行脚本阶段错误 : framework is a directory

swift - TodayViewController 上没有这样的模块错误

swift - 如何解决插件 `cocoapods-acknowledgements`

android - 我是 xamarin 新手,想在我的 xamarin.forms 项目中实现对话框

php - 上传图片到服务器不起作用

ios - Xcode 6.1 UIImageView 在调整大小时消失

ios - 尝试将 Crashlytics 更新到 v3.10.3 时没有此类模块错误