符号的可见性(来自__ attribute __(visibility(“...”))和-fvisibility)可从so文件中获知
nm -C lib.so
T是隐藏的,T是导出的(即默认)。但如何直接从目标文件中获得这些信息呢?
nm -C lib.o
对于非C静态符号,无论可见性如何,都将始终打印T。
bqf10yzr1#
可见性与符号是局部的还是全局的不同(这是小写/大写字母所描述的)。隐藏的符号仍然可以有外部链接,即它不限于翻译单元。我认为nm没有显示可见性的选项,但您可以使用其中任何一个
nm
objdump -Ct lib.o
如果符号被隐藏或
readelf -s lib.o
其具有用于可见度(DEFAULT/HIDDEN)的列。
DEFAULT
HIDDEN
5t7ly7z52#
我认为visibility是共享库的概念,而不是目标文件的概念。下面是一个测试来验证它。
visibility
//math.cpp __attribute__((visibility("default"))) int bbbb; __attribute__((visibility("hidden"))) int aaaa;
S
> g++ -c math.c > nm math.o 000000000000007c S _aaaa 0000000000000078 S _bbbb
aaaa
> g++ -shared -fPIC -o libmath.so math.cpp > nm libmath.so 0000000000004004 s _aaaa 0000000000004000 S _bbbb
2条答案
按热度按时间bqf10yzr1#
可见性与符号是局部的还是全局的不同(这是小写/大写字母所描述的)。隐藏的符号仍然可以有外部链接,即它不限于翻译单元。
我认为
nm
没有显示可见性的选项,但您可以使用其中任何一个如果符号被隐藏或
其具有用于可见度(
DEFAULT
/HIDDEN
)的列。5t7ly7z52#
我认为
visibility
是共享库的概念,而不是目标文件的概念。下面是一个测试来验证它。
S
是大写的,表示它是全局的)aaaa
)被标记为本地的。