符号种类有哪些?如何区分?

2021-02-25  本文已影响0人  Bepawbikvy

1、多环境配置的三种方式
2、解决xcconfig冲突
3、Mach-O与链接器
4、符号的种类与作用
5、strip命令


Symbol Table
1、按照存在空间区分:

non private externalweak private external

2、按照模块区分:
weak globalweak 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_leveInamespaceflat_namespace
二级命名空间与一级命名空间。链接器默认采用二级命名空间,也就是除了会记录符号名称,还会记录下来_NSlog来着Foundation。

Weak Symbol
Weak Reference Symbol:表示此未定义符号是弱引用。如果动态链接器找不到该符号的定义,则将其符为0,静态链接器会将此符号 设置弱链接标志。
Weak Defintion Symbol:表示此符号为弱定义符号。如果静态链接器或动态链接器为此符号找到另一个(非弱)定义,则弱定义将被忽略。只能将合并部分中的符号标记为弱定义。

Common Symbol
在定义时,未初始化的全局符号。

链接器设置:

上一篇 下一篇

猜你喜欢

热点阅读