如何知道对象文件中符号的可见性
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
)。
符号的可见性(来自__属性__(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
)。