2017-07-03 74 views
2

我有一个很老的遗留项目(从2010年的某个地方约会)。 2013年Crashlytics手动更新到3.8.4导致链接错误

我试图更新它在其Crashlytics套件最后更新的地方。它不使用吊舱,所以我使用了official Manual update指南。

  1. 我下载更新包。
  2. 建议使用新建的Crashlytics替代旧的Crashlytics。旧的没有Fabric套件,所以我只是将它粘贴在那里,并在Project设置中链接库。

这些是那里描述的仅有的两个步骤。但这样做导致的链接错误:

Undefined symbols for architecture x86_64: 
    "___gxx_personality_v0", referenced from: 
     +[CLSDemangleOperation demangleBlockInvokeCppSymbol:] in Crashlytics(CLSDemangleOperation.o) 
     +[CLSDemangleOperation demangleSwiftSymbol:] in Crashlytics(CLSDemangleOperation.o) 
     -[CLSDemangleOperation main] in Crashlytics(CLSDemangleOperation.o) 
     ___28-[CLSDemangleOperation main]_block_invoke in Crashlytics(CLSDemangleOperation.o) 
     Dwarf Exception Unwind Info (__eh_frame) in Crashlytics(CLSDemangleOperation.o) 
    "vtable for __cxxabiv1::__pointer_type_info", referenced from: 
     typeinfo for std::exception const* in Crashlytics(CLSException.o) 
    NOTE: a missing vtable usually means the first non-inline virtual member function has no definition. 
    "vtable for __cxxabiv1::__vmi_class_type_info", referenced from: 
     typeinfo for std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > in Crashlytics(CLSException.o) 
    NOTE: a missing vtable usually means the first non-inline virtual member function has no definition. 
    "___cxa_begin_catch", referenced from: 
     CLSTerminateHandler() in Crashlytics(CLSException.o) 
     ___clang_call_terminate in Crashlytics(CLSException.o) 
    "std::get_terminate()", referenced from: 
     _CLSExceptionCheckHandlers in Crashlytics(CLSException.o) 
    "typeinfo for char const*", referenced from: 
     GCC_except_table1 in Crashlytics(CLSException.o) 
    "typeinfo for std::bad_alloc", referenced from: 
     GCC_except_table1 in Crashlytics(CLSException.o) 
    "typeinfo for std::exception", referenced from: 
     GCC_except_table1 in Crashlytics(CLSException.o) 
     typeinfo for std::exception const* in Crashlytics(CLSException.o) 
    "___cxa_current_exception_type", referenced from: 
     CLSTerminateHandler() in Crashlytics(CLSException.o) 
    "___cxa_rethrow", referenced from: 
     CLSTerminateHandler() in Crashlytics(CLSException.o) 
    "vtable for __cxxabiv1::__class_type_info", referenced from: 
     typeinfo for std::__1::__basic_string_common<true> in Crashlytics(CLSException.o) 
    NOTE: a missing vtable usually means the first non-inline virtual member function has no definition. 
    "___cxa_end_catch", referenced from: 
     CLSTerminateHandler() in Crashlytics(CLSException.o) 
    "___cxa_demangle", referenced from: 
     +[CLSDemangleOperation demangleCppSymbol:] in Crashlytics(CLSDemangleOperation.o) 
    "std::terminate()", referenced from: 
     ___clang_call_terminate in Crashlytics(CLSException.o) 
    "std::set_terminate(void (*)())", referenced from: 
     _CLSExceptionInitialize in Crashlytics(CLSException.o) 
     CLSTerminateHandler() in Crashlytics(CLSException.o) 
ld: symbol(s) not found for architecture x86_64 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 

事情我已经尝试:

  1. 删除Crashlytics面料的两个引用并重新连接它们。
  2. 删除这两个套件的物理实例并读取它们。
  3. 清除XCode的派生数据。
  4. 清理项目。
  5. 通过Cocoapods安装最新版本。
  6. 通过面料应用

但错误仍然存​​在升级。现在,我的智慧已经结束了。有关如何解决此问题的任何想法?

+0

听起来很奇怪。我正在研究一个类似的项目(没有豆荚),但通常更新面料并不麻烦。这两个框架是否包含在使用中的目标中? – user3752049

+0

@ user3752049是的。我的项目中有四个目标,它们都包含在所有目标中(这就是我重新链接/读取它们的意思)。 – NSNoob

回答

0

我想通了。

的问题,前面的家伙已经修改了链接器和编译器标志,并从中取出$(inherited)标志,该标志被重写的CocoaPods CONFIGS该消息又在联用的CocoaPods主要项目,因此缺少符号的XCode couldn”造成的故障找到没有链接的符号。

首先我删除了手动Crashlytics,然后通过cocoapods安装它们。现在它说,符号不见了。

要解决这个问题:

  1. 转到“预处理宏”,并确保$(inherited)被添加到调试和释放CONFIGS。
  2. 转到“其他链接器标记”,并确保$(inherited)标志添加有作为。

Crashlytics 3.8.4现在正在运行。