otool输出中的“ binds_to_weak”和“ weak_defines”标志代表什么?

时间:2018-12-09 12:12:34

标签: ios otool

在使用以下命令后,我得到了两个标志,分别是“ binds_to_weak”和“ weak_defines”。它们的意义是什么?

$ otool -hv

(架构armv7): 马赫头      魔术cputype cpusubtype caps filetype ncmds sizeofcmds标志   MH_MAGIC ARM V7 0x00执行38 4292 NOUNDEFS DYLDLINK TWOLEVEL WEAK_DEFINES BINDS_TO_WEAK PIE

1 个答案:

答案 0 :(得分:0)

MH_WEAK_DEFINES意味着可执行文件具有弱符号。弱符号是避免在未使用的支持代码中进行链接的链接器技巧。例如,编译器进行分析并确定该应用程序仅是整数,并告诉链接器不要链接浮点支持代码。来自Oracle® Solaris 11.4 Linkers and Libraries Guide(不是在谈论Mach-O):

  

从历史上看,弱符号已被用来规避插入,   或测试可选功能。但是,经验表明   弱符号在现代编程中是脆弱且不可靠的   环境,不鼓励使用它们。

在John Levine的链接器和加载器的第6章中对此进行了更好的解释。