Ios 为文件添加前缀以避免外部框架之间的符号冲突

Ios 为文件添加前缀以避免外部框架之间的符号冲突,ios,c,xcode,Ios,C,Xcode,我在IOS代码中使用了两个外部框架。两个框架都在内部使用plcrashreopterframework,因此我得到了重复的符号错误 现在,其中一个框架,即crash reporter框架提供了向文件名/符号添加前缀的功能。下面是为在nameSpace.h中添加前缀而编写的代码: 现在错误“来自Apple Mach-O链接器错误” 我已经在所有包含项之上添加了nameSpace.h文件 请引导我尽可能尝试所有可能的事情,但没有用。 提前谢谢 您需要使用相同的宏定义重新编译相应的framwork

我在IOS代码中使用了两个外部框架。两个框架都在内部使用
plcrashreopter
framework,因此我得到了重复的符号错误

现在,其中一个框架,即crash reporter框架提供了向文件名/符号添加前缀的功能。下面是为在nameSpace.h中添加前缀而编写的代码:



现在错误“
来自Apple Mach-O链接器错误”

我已经在所有包含项之上添加了
nameSpace.h
文件

请引导我尽可能尝试所有可能的事情,但没有用。
提前谢谢

您需要使用相同的宏定义重新编译相应的framwork(所有.c文件),以便它导出并使用修改后的符号名。

您还必须更改其中一个框架源文件中的名称。仅更改头文件中的名称是不够的。是否有原因使您不能在不使用重命名符号的情况下将它们链接到同一
plcrashreopter
框架?这是一个外部框架,因此我没有它的源代码。只有头是可见的。这是一个第三方框架。找不到.c文件。只有几个头文件可见。PLCrashReporter的源存储库在这里:但这对您没有任何帮助,因为您还需要重新编译一个使用PLCrashReporter的外部框架。因此,真正的解决方案是要求您的第三方供应商为其框架提供名称空间版本的PLCrashReporter。除此之外,您还需要能够在其中一个框架中禁用崩溃报告,因为您可以同时通过这两个框架获取报告。通过从PLCRASHREPORT的源代码重新编译和重新生成框架(Kerni在上述评论中给出的链接)解决了此问题。
#define PLCRASHREPORTER_PREFIX AcmeCo

#ifdef PLCRASHREPORTER_PREFIX

// We need two extra layers of indirection to make CPP substitute
// the PLCRASHREPORTER_PREFIX define.
#define PLNS_impl2(prefix, symbol) prefix ## symbol
#define PLNS_impl(prefix, symbol) PLNS_impl2(prefix, symbol)
#define PLNS(symbol) PLNS_impl(PLCRASHREPORTER_PREFIX, symbol)

#define PLCrashMachExceptionServer          PLNS(PLCrashMachExceptionServer)
#define PLCrashReport                       PLNS(PLCrashReport)
#define PLCrashReportApplicationInfo        PLNS(PLCrashReportApplicationInfo)
#define PLCrashReportBinaryImageInfo        PLNS(PLCrashReportBinaryImageInfo)
#define PLCrashReportExceptionInfo          PLNS(PLCrashReportExceptionInfo)
Undefined symbols for architecture i386:
  "_OBJC_CLASS_$_AcmeCoPLCrashReport", referenced from:
      objc-class-ref in CrashReporter.o