解决Xcode中公用文件冲突方法

最近在搞SDK,有需求要将SDK拆成多个.a库,而其中多个库中都用到了一些公用类,如果将这些库放在同一个工程中,编译就会出现duplicate symbol问题,这也是一个很头疼的问题。

经过Google,找到了一个很神奇的方法,通过预定义宏的方式将冲突的文件重命名,这个编译的时候就不会报错了。

原理如下:

就是将类名通过宏定义的方式将其重命名,编译的时候使用重名后的名字进行编译。
比如类ClassA,将其重名为ClassB,可以通过宏
#define ClassA ClassB
这样编译的时候是使用ClassA来编译的,而不是使用之前的ClassB了。

以下是操作方法:

1.可以在Build Settings-> Apple LLVM 7.1 - Custom Complier Flags-> Other C Flags中,添加类似以下选项:

Other C Flags
其中-Dname=rename表示将name重名为rename
-Dgcc的编译选项,对于-Dname=definition,其表示为预定义名为name,值为definition的宏。
其实就相当于在代码中定义宏
#define name definition

2.也可以在Build Phases -> Compile Sources中对某个文件的Complier Flags进行设置,如下,将HTMLParser重命名为SDHTMLParser

Compiler flags

经过设置之后,多个库公用了同一类文件的库,放在一个工程里面就不会冲突了。不过有一些麻烦,需要对公用的文件都重命名一下才行。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • ECMAScript关键字 delete do else finally function in instance...
    doudou2阅读 736评论 0 0
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,288评论 19 139
  • __block和__weak修饰符的区别其实是挺明显的:1.__block不管是ARC还是MRC模式下都可以使用,...
    LZM轮回阅读 3,453评论 0 6
  • ———————————————回答好下面的足够了---------------------------------...
    恒爱DE问候阅读 1,777评论 0 4
  • 1.写一个NSString类的实现 +(id)initWithCString:(c*****t char *)nu...
    韩七夏阅读 3,829评论 2 37