ELF 符号名称出现两次(.data.rel.ro 和 .bss)
ELF symbol name occurs twice (.data.rel.ro and .bss)
在我的库中(ELF arm64,Android)我两次看到相同的错位符号名称(名称已更改):
>> nm --format sysv libAPP.so.dbg | grep _ZL15s_symbolNameXYs
_ZL15s_symbolNameXYs|0000000003a9c758| d | OBJECT|0000000000000578| |.data.rel.ro
_ZL15s_symbolNameXYs|0000000016604940| b | OBJECT|00000000000005c0| |.bss
我以为名字必须是唯一的?这是什么原因?
我没有库的 C/C++ 代码,如果您知道是什么代码生成的,我会很高兴。
谢谢
更新:
也会发生这种情况,这对我来说更没有意义:
>> nm --format sysv --defined-only libAPP.so.dbg | grep _ZL12aisomes_list
_ZL12aisomes_list |0000000000834780| r | OBJECT|0000000000000030| |.rodata
_ZL12aisomes_list |0000000000834980| r | OBJECT|0000000000000030| |.rodata
符号类型中的小写字母(在您的示例中,d
、b
和r
)表示局部符号。这些不受链接的约束,因此可能会在同一二进制文件中出现多次。这没有错。
此类符号的主要来源是目标文件中的局部符号。链接器只是将涉及的所有目标文件的本地符号传输到二进制文件的符号 table 中,而不将它们链接在一起。所以很可能,多个目标文件定义了一个名为 _ZL15s_symbolNameXYs
.
的本地符号
在我的库中(ELF arm64,Android)我两次看到相同的错位符号名称(名称已更改):
>> nm --format sysv libAPP.so.dbg | grep _ZL15s_symbolNameXYs
_ZL15s_symbolNameXYs|0000000003a9c758| d | OBJECT|0000000000000578| |.data.rel.ro
_ZL15s_symbolNameXYs|0000000016604940| b | OBJECT|00000000000005c0| |.bss
我以为名字必须是唯一的?这是什么原因?
我没有库的 C/C++ 代码,如果您知道是什么代码生成的,我会很高兴。
谢谢
更新: 也会发生这种情况,这对我来说更没有意义:
>> nm --format sysv --defined-only libAPP.so.dbg | grep _ZL12aisomes_list
_ZL12aisomes_list |0000000000834780| r | OBJECT|0000000000000030| |.rodata
_ZL12aisomes_list |0000000000834980| r | OBJECT|0000000000000030| |.rodata
符号类型中的小写字母(在您的示例中,d
、b
和r
)表示局部符号。这些不受链接的约束,因此可能会在同一二进制文件中出现多次。这没有错。
此类符号的主要来源是目标文件中的局部符号。链接器只是将涉及的所有目标文件的本地符号传输到二进制文件的符号 table 中,而不将它们链接在一起。所以很可能,多个目标文件定义了一个名为 _ZL15s_symbolNameXYs
.