Link过程中的错误
在 Mach-O文件中TEXT和DATA部分对每个方法和变量都称之为符号(Symbol),并且让每一个符号和内存地址存在映射关系
Undefined
1 | **Undefined symbols for architecture ....... objc-class-ref in XXX.o** (未定义的符号) |
本质原因 当源文件中某行代码想使用某个变量或者方法时,在Mach-O中找不到对应的内存地址,所以说认为该符号(Symbol)不存在、未定义
可能出现的情况为
- 与.h对应的.m文件中没有实现对应的方法,且该方法被使用了
- 程序所依赖的lib.a或者lib.framework中不存在某种架构下x86的二进制文件
Duplicated
1 | **Duplicated symbols for architecture ....... objc-class-ref in XXX.o** (重复的符号) |
本质原因 当Mach-O想生成某个符号和地址的映射时,发现已经存在该符号和一个地址的映射,如果再次写入该符号(Symbol)将存在两个,无法进行区分
可能出现的情况是
- 在两个.m文件中存在相同的Class
- 在当前工程中的某个.m文件中存在和依赖库或者
符号表会受到的影响
生成符号表的Link过程会受到Other Link Flag和Strip设置的影响,不是100%会出现报错,将会在后续文章中讨论