语境:转到 1.2,Ubuntu 12.10目标:减少已编译二进制文件的大小目前在我的构建过程中,我运行“go install”来生成二进制文件。我从某处读到,如果我传入-w它将缩小二进制文件。我通过将它传递到-ldflags选项中进行了尝试,我的二进制文件大小丢失了 1MB。这个-w标志在任何地方都有记录吗?它实际上有什么作用?然后我发现了这个strip -s <binary>命令并在上面运行它,-w然后又减少了 750KB!生成的二进制文件运行良好。剥离在任何情况下都会引起问题吗?
3 回答
慕慕森
TA贡献1856条经验 获得超17个赞
如果使用 -ldflags '-w -s' 编译,您将获得最小的二进制文件。-w 关闭 DWARF 调试信息:您将无法在二进制文件上使用 gdb 来查看特定函数或设置断点或获取堆栈跟踪,因为将不包括 gdb 需要的所有元数据。您也将无法使用依赖于信息的其他工具,例如 pprof 分析。-s 关闭 Go 符号表的生成:您将无法使用“go tool nm”来列出二进制文件中的符号。Strip -s 就像将 -s 传递给 -ldflags 一样,但它并没有剥离那么多。在 'strip -s' 之后,'Go tool nm' 可能仍然有效。我不完全确定。
这些 - 不是 -ldflags -w,不是 -ldflags -s,不是 strip -s - 都不会影响实际程序的执行。它们仅影响您是否可以使用其他工具调试或分析程序。
largeQ
TA贡献2039条经验 获得超7个赞
该go help build
说
-ldflags 'flag list' arguments to pass on each 5l, 6l, or 8l linker invocation.
所以,我们可以调用go tool 6l
来查看它的所有选项。其中之一是
-w disable DWARF generation
顺便说一下,5l
代表ARM ( $GOARCH = arm
),6l
代表x86-64 ( $GOARCH = amd64
),8l
代表x86 ( $GOARCH = 386
)。
如果你真的想查看原始DWARF信息,你应该dwarfdump -a
在 OS X 和objdump -wg
Linux 上使用。警告!输出会很长,很长。
喵喔喔
TA贡献1735条经验 获得超5个赞
你可以从 go tool link
$ go tool link ... -s disable symbol table -w disable DWARF generation
- 3 回答
- 0 关注
- 437 浏览
添加回答
举报
0/150
提交
取消