如何知道对象文件中符号的可见性

How to know the visibility of a symbol in an object file

符号的可见性(来自__属性__(visibility("..."))和-fvisibility)可以从so文件中获知

nm -C lib.so

t 被隐藏,T 被导出(即默认)。但是如何直接从目标文件中获取这些信息呢?

nm -C lib.o

无论可见性如何,始终为非 C 静态符号打印 T。

可见性不同于符号是局部的还是全局的(这是 lower-case/upper-case 字母所描述的)。隐藏符号仍然可以有外部链接,即不限于翻译单元。

我认为 nm 没有显示可见性的选项,但您可以使用其中一个

objdump -Ct lib.o

这将显示一个属性 .hidden 如果符号被隐藏或

readelf -s lib.o

其中有一列用于可见性 (DEFAULT/HIDDEN)。