XCode 6.4 破坏了依赖 zipzap 的项目
XCode 6.4 breaks Project with zipzap dependency
在我升级到 XCode 6.4 之前,项目运行良好,但升级后我将构建失败归结为 zipzap。
Using CocoaPod 0.37.2
pod 'zipzap', '~> 8.0'
Linked Frameworks and Libraries = libz.1.2.5.dylib
Targeting 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
到目前为止我所做的事情
- 对于项目和 Pods 项目:构建设置 > C++ 标准库 = libstdc++(最初是 libc++)
- 几次 pod deintegrate && rm *.lock && pod install
我也遇到过这个问题 - ZipZap podspec 已更新,在此过程中丢失了许多编译器标志:
https://github.com/pixelglow/ZipZap/commit/0e4e6aa885196640ca86462c6748e68a50c66ee9
我在我的项目中解决这个问题的方法是恢复编译器标志(在更新之前存在)如下:
- 导航到工作区中的 Pods 项目
- Select Pods-zipzap 目标
- Select 构建阶段选项卡
- 展开编译源部分
- Select 所有 Objective-C++ 文件(扩展名为 .mm)- 按住 CMD 键到 select 多个文件
- 添加编译器标志:-fno-objc-exceptions -fno-exceptions -std=c++11 -stdlib=libc++ -DOS_OBJECT_USE_OBJC=0
- Select 所有 Objective-C 文件 (.m) 除了 Pods-zipzap-dummy.m
- 添加编译器标志:-fno-objc-exceptions -std=c99 -DOS_OBJECT_USE_OBJC=0
- Select 一个 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。
在我升级到 XCode 6.4 之前,项目运行良好,但升级后我将构建失败归结为 zipzap。
Using CocoaPod 0.37.2
pod 'zipzap', '~> 8.0'
Linked Frameworks and Libraries = libz.1.2.5.dylib
Targeting 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
到目前为止我所做的事情
- 对于项目和 Pods 项目:构建设置 > C++ 标准库 = libstdc++(最初是 libc++)
- 几次 pod deintegrate && rm *.lock && pod install
我也遇到过这个问题 - ZipZap podspec 已更新,在此过程中丢失了许多编译器标志:
https://github.com/pixelglow/ZipZap/commit/0e4e6aa885196640ca86462c6748e68a50c66ee9
我在我的项目中解决这个问题的方法是恢复编译器标志(在更新之前存在)如下:
- 导航到工作区中的 Pods 项目
- Select Pods-zipzap 目标
- Select 构建阶段选项卡
- 展开编译源部分
- Select 所有 Objective-C++ 文件(扩展名为 .mm)- 按住 CMD 键到 select 多个文件
- 添加编译器标志:-fno-objc-exceptions -fno-exceptions -std=c++11 -stdlib=libc++ -DOS_OBJECT_USE_OBJC=0
- Select 所有 Objective-C 文件 (.m) 除了 Pods-zipzap-dummy.m
- 添加编译器标志:-fno-objc-exceptions -std=c99 -DOS_OBJECT_USE_OBJC=0
- Select 一个 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。