示例:
$ objdump Logger.cpp.o -t
00000000 g F .text 00000000 .hidden __sti___10_Logger_cpp_0b2ae32b
答案 0 :(得分:1)
这意味着隐藏了符号的可见性:https://developer.apple.com/library/mac/#documentation/DeveloperTools/Conceptual/CppRuntimeEnv/Articles/SymbolVisibility.html
更改符号可见性的原因包括:
有关详细信息,请参阅http://www.gnu.org/software/gnulib/manual/html_node/Exported-Symbols-of-Shared-Libraries.html。
答案 1 :(得分:1)
解释visibility support(对于gcc)
的链接从链接:
它极大地改善了DSO(动态共享对象)的加载时间。例如,一个经过测试的巨大的基于C ++模板的库(TnFOX Boost.Python绑定库)现在可以在8秒内加载而不是超过6分钟!
它可以让优化器生成更好的代码。 PLT间接(当必须通过全局偏移表(例如PIC代码)查找函数调用或变量访问时)可以完全避免,从而基本上避免现代处理器上的流水线停顿,从而更快地编码。此外,当大多数符号在本地绑定时,可以通过整个DSO完全安全地删除(删除)它们。这样可以提供更大的自由度,特别是内联器不再需要保持“以防万一”的入口点。
它将您的DSO大小减少了5-20%。 ELF的导出符号表格式非常耗费空间,给出了完整的错位符号名称,模板使用量很大,平均大约1000字节。 C ++模板喷出大量符号,典型的C ++库可以轻松超过30,000个符号,大约5-6Mb!因此,如果您删除了60-80%的不必要符号,那么您的DSO可能会减少兆字节数!
符号碰撞的几率低很多。内部使用相同符号表示不同内容的两个库的旧问题最终落后于我们这个补丁。哈利路亚!
尽管上面引用的库是一种极端情况,但新的可见性支持从>>中减少了导出的符号表。 200,000个符号,小于18,000个。大约21Mb也被淘汰了二进制大小!
使用visibilty属性时的usage sample and also potential pitfall