ZHCUAU3J January 2018 – March 2024
弱符号是可能定义,也可能不定义的符号。
对于定义了“弱”绑定的符号与定义了全局绑定的符号,链接器的处理方式不同。如果某弱符号需要解析某未以其他方式解析的引用,链接器不会在目标文件的符号表中包含该弱符号(就像全局符号那样),而只会在“最终”链接的输出中包含该弱符号。
这样可使链接器省略解析引用时不需要的符号,最大限度地减少输出文件的符号表中包含的符号数量。减小输出文件符号表的大小,可减少链接所需的时间,特别是在有大量预先加载的符号要予以链接的情况下。
weak(ext_addr_sym) = 0x12345678;
如果链接器命令文件执行最终链接,“ext_addr_sym”会作为弱符号提供给链接器;如果未引用该符号,它将不会被包含在生成的输出文件中。请参阅节 12.6.6。
如果同一符号有多个定义,链接器会根据特定规则确定优先使用哪个定义。一些定义可能有弱绑定,另一些定义可能有强绑定。“强”在此上下文中意为该符号并未 在链接器命令文件的赋值语句中进行弱绑定。链接器根据以下指导原则确定将引用解析为符号时使用哪个定义: