gpt4 book ai didi

c++ - 为什么隐藏符号仍然添加到 DSO

转载 作者:行者123 更新时间:2023-11-28 01:33:32 25 4
gpt4 key购买 nike

user@pc ~/hiddensymbols
% cat main.cpp
__attribute__((visibility ("hidden"))) int f_b1(void){
return 21 ;
}

__attribute__((visibility ("hidden"))) int f_b3(void){
return f_b1() ;
} user@pc ~/hiddensymbols
% g++ -shared main.cpp
user@pc ~/hiddensymbols
% nm -C ./a.out
.............
000000000000055a t f_b1()
0000000000000565 t f_b3()

我想知道,将这两个符号留在 DSO 中有什么意义?我知道动态链接器不能使用它们,但是为什么它们被添加到一些隐藏的符号表中呢?这样做的目的是什么?

最佳答案

当链接器发出目标文件时,它会记录每个符号的名称和地址,而不管其可见性(在 .symtab 部分中,您可以使用 readelf --symbols <elf-file> 转储)。它用于调试以显示符号名称,即使没有可用的调试信息也是如此。在正常执行期间,此部分不会加载/映射到地址空间。

隐藏符号不能用于解析来自其他目标文件的符号,就像标有 static 的符号一样关键词。你可以用 strip 去掉它们必要时实用。

关于c++ - 为什么隐藏符号仍然添加到 DSO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50472938/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com