2

在我升级到 XCode 6.4 之前,该项目运行良好,但升级后我将构建失败归结为 zipzap。

使用 CocoaPod 0.37.2

pod 'zipzap', '~> 8.0'

链接的框架和库 = libz.1.2.5.dylib

针对 iOS 7.0 +

构建失败

Undefined symbols for architecture arm64:
  "___cxa_begin_catch", referenced from:
      ___clang_call_terminate in libPods-Ally-zipzap.a(ZZArchive.o)
  "std::terminate()", referenced from:
      ___clang_call_terminate in libPods-Ally-zipzap.a(ZZArchive.o)
  "___gxx_personality_v0", referenced from:
      +[ZZArchive archiveWithURL:error:] in libPods-Ally-zipzap.a(ZZArchive.o)
      +[ZZArchive archiveWithData:error:] in libPods-Ally-zipzap.a(ZZArchive.o)
      -[ZZArchive initWithURL:options:error:] in libPods-Ally-zipzap.a(ZZArchive.o)
      -[ZZArchive initWithData:options:error:] in libPods-Ally-zipzap.a(ZZArchive.o)
      -[ZZArchive initWithChannel:options:error:] in libPods-Ally-zipzap.a(ZZArchive.o)
      -[ZZArchive loadCanMiss:error:] in libPods-Ally-zipzap.a(ZZArchive.o)
      -[ZZArchive updateEntries:error:] in libPods-Ally-zipzap.a(ZZArchive.o)
      ...
ld: symbol(s) not found for architecture arm64

到目前为止我所做的事情

  1. 对于项目和 Pods 项目:构建设置 > C++ 标准库 = libstdc++(最初是 libc++)
  2. 几次 pod deintegrate && rm *.lock && pod install
4

1 回答 1

1

我也遇到过这个问题 - ZipZap podspec 已更新,在此过程中丢失了许多编译器标志:

https://github.com/pixelglow/ZipZap/commit/0e4e6aa885196640ca86462c6748e68a50c66ee9

我在项目中解决此问题的方法是恢复编译器标志(在更新之前存在),如下所示:

  • 导航到工作区中的 Pods 项目
  • 选择 Pods-zipzap 目标
  • 选择构建阶段选项卡
  • 展开编译源部分
  • 选择所有 Objective-C++ 文件(扩展名为 .mm) - 按住 CMD 键选择多个文件
  • 添加编译器标志:-fno-objc-exceptions -fno-exceptions -std=c++11 -stdlib=libc++ -DOS_OBJECT_USE_OBJC=0
  • 选择除 Pods-zipzap-dummy.m 之外的所有 Objective-C 文件 (.m)
  • 添加编译器标志:-fno-objc-exceptions -std=c99 -DOS_OBJECT_USE_OBJC=0
  • 选择一个 C++ 文件 (.cpp)
  • 添加编译器标志:-fno-exceptions -std=c++11 -stdlib=libc++ -DOS_OBJECT_USE_OBJC=0

如果您有一个测试目标,您可能还需要在那里添加相同的标志。一切顺利,您现在应该能够再次构建。

[更新]:将 Cocoapods 升级到 0.38.0 版也将解决错误,但可能会导致当前使用 ZipZap 8.0.4 的编译错误 - 请参阅https://github.com/pixelglow/ZipZap/issues/105

或者,您可以在 Podfile 中回滚到 ZipZap 8.0.3。

于 2015-07-16T11:14:11.640 回答