为什么剥离符号不同strip
and go build -ldflags "-s -w"
(see here https://stackoverflow.com/questions/29599209/how-to-build-a-release-version-binary-in-go)?
$ go build -ldflags "-s -w" -o primes_no_symbols_from_go_build primes.go
$ go build -o primes primes.go && strip -s primes -o primes_no_symbols_from_strip
$ objdump -D primes_no_symbols_from_go_build > primes_no_symbols_from_go_build.human
$ objdump -D primes_no_symbols_from_strip > primes_no_symbols_from_strip.human
$ grep -rn "add" primes_no_symbols_from_go_build.human | wc -l
149568
$ grep -rn "add" primes_no_symbols_from_strip.human | wc -l
149556
什么可以解释这些变化? (底层的 go 程序,可能不相关,来自here https://stackoverflow.com/questions/68280753/forbid-inlining-in-golang).
strip 和 ld 工具是特定于操作系统的,来自
man strip
当在可执行文件上不带任何选项的情况下使用 strip 时,它会检查
要查看的文件
如果它使用动态链接编辑器。如果是,则 strip 命令的效果是
与使用 -u 和 -r 选项相同。如果文件没有使用动态链接
编辑器中,不带任何选项的 strip 的效果与使用 -s 选项的效果相同
ld(1)。选项 -S、-x 和 -X 与 ld(1) 选项具有相同的效果。这
可以组合 strip(1) 的选项来将符号表修剪为所需的内容。
即大多数 ld 没有 -w,这意味着在 OSX 上“抑制所有警告消息”
在 Linux/Debian 上
1187840 Jul 7 09:05 primes_no_symbols_from_go_build_s
1187840 Jul 7 09:05 primes_no_symbols_from_go_build_s_w
1755360 Jul 7 09:05 primes_simple_go_build
1187004 Jul 7 09:06 primes_simple_go_build_strip
on OSX
2076146 Jul 7 16:02 primes_no_symbols_from_go_build_s
1580786 Jul 7 16:02 primes_no_symbols_from_go_build_s_w
2076146 Jul 7 16:02 primes_simple_go_build
1997872 Jul 7 16:04 primes_simple_go_build_strip
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)