我在我的树莓派上编译了一个 aarch64 elf 可执行文件:
$ file kbgen.elf.aarch64
kbgen.elf.aarch64: ELF 64-bit LSB executable, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-aarch64.so.1, for GNU/Linux 3.7.0, BuildID[sha1]=4cf36e84c30ea8e53073bb64cf99df1d82084702, with debug_info, not stripped
当我尝试在我的 x64 机器(wsl)上剥离它的符号时失败了:
$ strip kbgen.elf.aarch64
strip: Unable to recognise the format of the input file `kbgen.elf.aarch64'
这很奇怪,对吧?我的意思是精灵部分是“跨平台的”,不是吗?
# get inside raspberry pi to make sure stripping is ok there
$ ls -l kbgen.elf.aarch64
-rwxr-xr-x 1 oren oren 73257408 Oct 26 08:40 kbgen.elf.aarch64
$ sudo strip kbgen.elf.aarch64
$ ls -l kbgen.elf.aarch64 # <----- size reduced by a half, good !
-rwxr-xr-x 1 root root 36358680 Oct 26 08:42 kbgen.elf.aarch64
# make sure elf was stripped with file utility
$ file kbgen.elf.aarch64
kbgen.elf.aarch64: ELF 64-bit LSB executable, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-aarch64.so.1, for GNU/Linux 3.7.0, BuildID[sha1]=4cf36e84c30ea8e53073bb64cf99df1d82084702, stripped
是的。
没有理由
strip
依赖于ELF平台1,除了Peter Cordes提到的历史实现偶然性:strip
使用libbfd
(也被、等使用objcopy
)objdump
,并且该库确实有很多特定于体系结构的部分(因为它处理的不仅仅是ELF部分)。您应该尝试使用
eu-strip
(elfutils
包的一部分)。我怀疑那eu-strip
会起作用。1有很多原因导致和
strip
之间的实现不同。但 的所有变体就目前而言几乎都相同。ELF
COFF
ELF
strip