什么可以导致变量出现在链接器映射文件中,而不是ELF符号表?



变量声明为

volatile bool is_usage_mode_convenience_activated = true;

它以正确的地址显示在链接器映射文件中,但我在ELF符号表中找不到它(用readelf -s检查)。

小调试信息(readelf——debug-dump=info)如下所示

<2><42019>: Abbrev Number: 104 (DW_TAG_variable)
<4201a>   DW_AT_name        : (indirect string, offset: 0x433aa): is_usage_mode_convenience_activated
<4201e>   DW_AT_decl_file   : 3
<4201f>   DW_AT_decl_line   : 21
<42020>   DW_AT_linkage_name: (indirect string, offset: 0x49717): _ZN20vehiclemodesprovider35is_usage_mode_convenience_activatedE
<42024>   DW_AT_type        : <0x392a3>
<42028>   DW_AT_external    : 1
<42028>   DW_AT_declaration : 1

我希望a找到DW_AT_location而不是DW_AT_declaration。程序中没有针对该变量的外部声明,因此DW_TAG_variable确实描述了该变量的唯一声明。

什么情况会导致这种情况?变量声明没有什么奇怪的。

它实际上是在符号表中,但由于readelf只写第n个字符,grep错过了它。使用显示整个符号的不同工具显示它确实存在于符号表中。不过还是很奇怪,它没有location属性。

相关内容

  • 没有找到相关文章

最新更新