为什么隐藏的符号仍然添加到 DSO 中
Why hidden symbols are still added to DSO
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 中有什么意义?我知道动态链接器不能使用它们,但是为什么将它们添加到某个隐藏的符号表中呢?这样做的目的是什么?
当链接器发出对象文件时,它会记录每个符号的名称和地址,而不管其可见性如何(在可以使用readelf --symbols <elf-file>
转储.symtab
部分中(。它用于调试以显示符号名称,即使没有可用的调试信息。在正常执行期间,此部分不会加载/映射到地址空间。
隐藏符号不能用于解析其他对象文件中的符号,就像用static
关键字标记的符号一样。如有必要,您可以使用strip
实用程序将它们剥离出来。
相关文章:
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 如何在C++中从两个单独的for循环中添加两个数组
- POCO::PostgreSQL:如何将std::vector支持添加到`Binder::bind`
- 如何仅为一个函数添加延迟
- 如何防止 c++ 在从浮点型转换为双精度型(不适用于 IO)时添加额外的小数?
- 使用std::transform将一个范围的元素添加到另一个范围中
- 如何将更多文件夹添加到c++include路径
- 如何将元素添加到数组的线程安全函数?
- QT通过C++添加映射QML项目
- 如何将点击的信号和插槽添加到qt中的自定义按钮中
- 如何使用重载的相等(==)运算符向测试用例添加描述
- 添加符号 libgtest.so 错误:命令行中缺少 DSO
- libstdc++.so.6:添加符号时出错:命令行中缺少 DSO
- 为什么隐藏的符号仍然添加到 DSO 中
- C 实现CNN错误添加符号:命令行中缺少DSO
- libopencv_core.so.2.4:错误添加符号:命令行中缺少DSO
- openCV 2.4.7 添加符号时出错:命令行中缺少 DSO
- gdb:在0x2aaaaaaab000添加的符号文件系统提供的 DSO 中找不到可加载的部分
- 添加符号时出错:命令行中缺少DSO
- gdb:在添加的符号文件系统提供的编号为0x#的DSO中找不到可加载的节