Crashlytics手册更新到3.8.4导致链接器错误

时间:2017-07-03 13:45:30

标签: ios objective-c xcode crashlytics

我有一个非常古老的遗产项目(从2010年开始约会)。它的Crashlytics工具包最后一次更新于2013年。

我试图更新它。它不使用pod,因此我使用了official Manual update指南。

  1. 我下载了更新的工具包。
  2. 按照建议用新的替换旧的Crashlytics。旧的没有Fabric工具包,所以我只是将其粘贴在那里并在Project设置中链接了库。
  3. 这是这里描述的唯一两个步骤。但这样做会导致链接器错误:

    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和Fabrics的引用并重新链接它们。
    2. 删除两个工具包的物理实例并读取它们。
    3. 清理XCode的派生数据。
    4. 清洁项目。
    5. 通过Cocoapods安装最新版本。
    6. 通过Fabric App升级
    7. 但错误仍然存​​在。现在,我在我的智慧结束。关于如何解决这个问题的任何想法?

1 个答案:

答案 0 :(得分:0)

我明白了。

问题是,前一个人修改了链接器和编译器标志,并从它们中移除了$(inherited)标志,这标志覆盖了Cocoapods配置,这反过来导致主项目与Cocoapods链接失败,因此缺少符号XCode无法找到没有链接的符号。

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

解决此问题:

  1. 转到&#34;预处理器宏&#34;并确保将$(inherited)添加到调试和释放配置中。
  2. 转到&#34;其他链接标记&#34;并确保在那里添加$(inherited)标志。
  3. Crashlytics 3.8.4现已启动并运行。