输出objdump -t的输出中".hidden"是什么意思?

MBo*_*ber 9 c c++ objdump

例:

$ objdump Logger.cpp.o  -t

00000000 g     F .text  00000000 .hidden __sti___10_Logger_cpp_0b2ae32b
Run Code Online (Sandbox Code Playgroud)

Dan*_*ien 3

这意味着符号的可见性被隐藏:https://developer.apple.com/library/archive/documentation/DeveloperTools/Conceptual/CppRuntimeEnv/Articles/SymbolVisibility.html

更改符号可见性的原因包括:

  • 符号冲突的风险较小。
  • 较小的二进制文件。
  • 减少启动时间,因为动态链接器不需要处理尽可能多的符号。
  • 有机会获得更高效的代码,因为编译器知道符号不能通过 LD_PRELOAD 类型的系统覆盖。
  • 防止第三方软件调用未记录的 API。

有关详细信息,请参阅http://www.gnu.org/software/gnulib/manual/html_node/Exported-Symbols-of-Shared-Libraries.html 。

  • @MBober:不,链接器在这种情况下产生错误是正确的。请记住,静态库基本上是目标文件的存档,当链接静态库时,所有目标文件都将成为链接器的输入。符号可见性会影响链接器的输出(可执行文件或动态库),但您仍然拥有链接器如果两个或多个目标文件定义相同的符号,则会出现问题。 (3认同)