当我使用“file”命令查看共享库时,如果出现“stripped, with debug_info”的提示,这是什么意思?

3
当我在共享库上使用“file”命令时:
file shared_library.so

它显示:
shared_library.so: ELF 32-bit LSB shared object, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /system/bin/linker, stripped, with debug_info

"stripped"意味着它已经去除了不必要的内容。但我不明白为什么带有调试信息的库仍然被称为"stripped"。

“stripped” 意味着共享对象(或任何已编译的对象)已被剥离其调试符号(通常使用 strip -s object)。strip 删除调试符号,从而使库更小、加载时间更快等等。通常认为,“发布”代码受益于被剥离,而“调试”代码则没有被剥离的意义。并非所有内容都被剥离,有许多选项,请参见 strip(1) - Linux manual page - David C. Rankin
1
在应用程序或库中保留调试符号不会影响内存使用或性能。链接器不会将符号映射到内存中。还可以查看GCC邮件列表上的如何通过gcc -g选项影响性能?。我认为发行版的strip可以减少磁盘空间。不关心符号的人不需要支付存储费用。想要进行调试的人可以安装它们。 - jww
1个回答

3
但我不明白为什么剥离库仍然有“with debug_info”。 这是使用strip --only-keep-debug file的效果。来自man strip: --only-keep-debug 剥离文件,删除任何不会被--strip-debug剥离的部分,并保留调试部分。在ELF文件中,这将保留输出中的所有注释部分。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接