1

我创建了一个静态库并添加了一个聚合目标来构建一个 .framework 静态框架,以便我可以发布给用户。

我必须在这个静态库中使用 PLCrashReporter,所以我下载了最新版本 1.2 beta 2,因为添加了 ARM64 支持并将 .xcodeproj 文件添加到我的静态库中的组中。在静态库目标的构建设置中添加了用户标头搜索路径,在构建阶段添加了目标依赖项中的 CrashReporter-iOS-Device (CrashReporter) 静态库和 Link Binary With Libraries 添加了 libCrashReporter-iphoneos.a 静态库。

我的静态库可以毫无问题地成功构建所有目标,但是在将我的 .xcodeproj 项目添加为 UI 客户端测试项目中的依赖项甚至直接添加我生成的 .framework 时,模拟器的构建会中断。

我可以在设备上运行它并正常工作,但在模拟器中使用它也很重要。

如果我点击构建,我会收到以下错误。

Undefined symbols for architecture i386:
  "std::terminate()", referenced from:
      ___clang_call_terminate in libReporter-iOS.a(PLCrashSignalHandler.o)
      ___clang_call_terminate in libReporter-iOS.a(PLCrashAsyncImageList.o)
  "___cxa_begin_catch", referenced from:
      ___clang_call_terminate in libReporter-iOS.a(PLCrashSignalHandler.o)
      ___clang_call_terminate in libReporter-iOS.a(PLCrashAsyncImageList.o)
  "___gxx_personality_v0", referenced from:
      Dwarf Exception Unwind Info (__eh_frame) in libReporter-iOS.a(PLCrashSignalHandler.o)
      Dwarf Exception Unwind Info (__eh_frame) in libReporter-iOS.a(PLCrashAsyncImageList.o)
      Dwarf Exception Unwind Info (__eh_frame) in libReporter-iOS.a(PLCrashSignalHandler.o)
      Dwarf Exception Unwind Info (__eh_frame) in libReporter-iOS.a(PLCrashAsyncImageList.o)
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)

我在这里肯定想念一些东西!

先感谢您。

4

2 回答 2

4

看起来 libCrashReporter-iphoneos.a 中缺少 i386 架构(该文件的名称也表明它仅适用于设备)。尝试运行lipo -info libCrashReporter-iphoneos.a以查看是否所有必需的架构都存在,如果 i386(模拟器所需)不存在,则必须找到 i386 的库(或者如果您自己构建它,则构建它)并用于lipo -create lib-iphoneos.a lib-iphonesimulator.a -output lib-all.a创建库具有所有必需的架构。

PS 我刚刚从https://www.plcrashreporter.org下载了最新版本,iOS 框架中的 CrashReporter.framework 似乎包含 armv7、armv7s 和 i386,所以如果你不需要 arm64 和 x86_64,你可以尝试一下.

编辑:查看以获得 arm64 支持(这是 9 月的测试版)。

EDIT2:起初我没有注意std::terminate(),所以如果所有必需的架构都在那里,您可能必须将 libstdc++ 添加到链接框架和库中。

于 2013-12-12T11:57:37.293 回答
0

顺便说一句..可以对其他人有用..

相同的设置:链接器标志中的 -lstdc++ 可以解决在 OSX 中的 Xcode 中的 C/C++ 中使用 MySQL 的类似问题。事实上,当你链接到 libmysqlclient.a 或 libmysqlclient.dylib 时,你会得到同样的错误。

它在以前安装 mysql 方面已被破坏。

验证是否有:

//:配置 = 调试 OTHER_LDFLAGS = -lstdc++

//:配置 = 分发 OTHER_LDFLAGS = -lstdc++

//:completeSettings = 一些 OTHER_LDFLAGS

希望这能有所帮助。

于 2015-01-06T07:56:06.997 回答