在使用以下命令后,我得到了两个标志,分别是“ 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
答案 0 :(得分:0)
MH_WEAK_DEFINES意味着可执行文件具有弱符号。弱符号是避免在未使用的支持代码中进行链接的链接器技巧。例如,编译器进行分析并确定该应用程序仅是整数,并告诉链接器不要链接浮点支持代码。来自Oracle® Solaris 11.4 Linkers and Libraries Guide(不是在谈论Mach-O):
从历史上看,弱符号已被用来规避插入, 或测试可选功能。但是,经验表明 弱符号在现代编程中是脆弱且不可靠的 环境,不鼓励使用它们。
在John Levine的链接器和加载器的第6章中对此进行了更好的解释。