单元测试中的"架构i386的未定义符号"

hpi*_*que 5 iphone xcode unit-testing undefined-symbol ziparchive

我只有在尝试构建iPhone静态库的单元测试时才会出现以下错误:

Undefined symbols for architecture i386:
  "std::terminate()", referenced from:
      -[ZipArchive dealloc] in libMyProject.a(ZipArchive.o)
  "___gxx_personality_v0", referenced from:
      Dwarf Exception Unwind Info (__eh_frame) in libMyProject.a(ZipArchive.o)
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Run Code Online (Sandbox Code Playgroud)

构建原始项目工作正常.

我能错过什么?

应该注意的是,ZipArchive是一个引用libz.dylib框架的.mm文件,该框架在原始项目和测试项目中都被引用.

此外,通常的Build Settings嫌疑人具有以下值:

框架搜索路径:"$(SDKROOT)/ Developer/Library/Frameworks""$(DEVELOPER_LIBRARY_DIR)/ Frameworks"

其他链接器标志:-all_load -lxml2 - ObjC

标题搜索路径:/ usr/include/libxml2

hpi*_*que 7

我在这篇文章中找到了解决方案.

由于某种原因,我不知道,ZipArchive.mm当静态库用于另一个项目(在本例中为测试项目)时,编译器需要将文件重命名为.m.

  • 按照[问题](https://github.com/paypal/PayPal-iOS-SDK/issues/61).在项目的Build Settings中,将`-lc ++`添加到Other Linker Flags如果你不想将.mm文件重命名为.m文件,可以解决这个问题. (2认同)