1、多环境配置的三种方式
2、解决xcconfig冲突
3、Mach-O与链接器
4、符号的种类与作用
5、strip命令
Symbol Table
- Symbol Table:用于保存符号。
- String Table:用于保存符号的名称。
- Indirect Symbol Table:间接符号表,保存使用外部符号(使用外部动态库的符号)。为Symbol Table子集。
1、按照存在空间区分:
non private external
、 weak private external
2、按照模块区分:
weak global
、 weak local
、‘ ’
3、按照功能区分:
Type | f | F | O | d | ABS | COM | UND |
---|---|---|---|---|---|---|---|
说明 | File | Function | Data | Debug | Absolute | Common | ? |
4、按照符号种类区分:
Symbol Type | 说明 |
---|---|
U | undefined(未定义) |
A | absolute(绝对符号) |
T ① | text section symbol(__TEXT.__text) |
D ① | data section symbol(__DATA.__data) |
B ① | bss section symbol(__DATA.__bss) |
C | common symbol(只能出现在MH_OBJECT 类型的Mach-O 文件中) |
- | debugger symbol table |
S ① | 除了上面所述的,存放在其他section 的内容,例如未初始化的全局变量存放在(__DATA.__common)中 |
I | indirect symbol(符号信息相同,代表同一符号) |
u | 动态共享库中的小写u表示一个未定义引用对同一库中另一个模块中私有外部符号 |
(①:小写代表;local symbol)
5、导入(Import)导出(Export)符号
export symbol
:导出符号意味着告诉别的模块,我有这么一个符号,你可以将其导入(Import)。
6、two_leveInamespace
、flat_namespace
二级命名空间与一级命名空间。链接器默认采用二级命名空间,也就是除了会记录符号名称,还会记录下来_NSlog来着Foundation。
Weak Symbol
Weak Reference Symbol
:表示此未定义符号是弱引用。如果动态链接器找不到该符号的定义,则将其符为0,静态链接器会将此符号 设置弱链接标志。
Weak Defintion Symbol
:表示此符号为弱定义符号。如果静态链接器或动态链接器为此符号找到另一个(非弱)定义,则弱定义将被忽略。只能将合并部分中的符号标记为弱定义。
Common Symbol
在定义时,未初始化的全局符号。
链接器设置:
- -d:强制定义
Common Symbol
- -commons:指定对待
Common symbol
如何响应
网友评论