【发布时间】:2026-01-15 16:00:01
【问题描述】:
当我编译我的程序 gcc -o myprog myprog.c 时,生成的二进制文件不会被剥离:
myprog: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically
linked (uses shared libs), for GNU/Linux 2.6.26,
BuildID[sha1]=0x2697ed96b65e8a11239af0a44abc7896954b6e20, not stripped
我想知道为什么gcc 在我没有提供任何调试参数的情况下默认会生成未剥离的二进制文件。
是否应该在编译后剥离所有二进制文件,即使用strip myprog?或者没有剥离二进制文件有什么好处?
AFAICS,/bin/、/usr/bin/ 中的大多数二进制文件都被剥离。
【问题讨论】:
-
Linux 上的 AFAIK 剥离通常通过
install命令完成 -
@Anycorn - 在什么情况下我会使用
install命令?直到现在我才听说过。 -
install通常用于将文件从构建目录移动到其最终目的地,/usr/bin、/bin等。它具有剥离二进制文件、设置权限等选项:linux.die.net/man/1/install -
Related。 gcc 默认不剥离的符号不是调试信息,它们是重定位信息(链接所需的东西)。
-
无需剥离它们。 IIUC:加载器忽略它们,VM 是你的朋友,磁盘空间是免费的。