通过 ldflags 选项传入 go 命令时 w 标志是什么意思?

语境:

转到 1.2,Ubuntu 12.10

目标:

减少已编译二进制文件的大小

目前在我的构建过程中,我运行“go install”来生成二进制文件。我从某处读到,如果我传入-w它将缩小二进制文件。我通过将它传递到-ldflags选项中进行了尝试,我的二进制文件大小丢失了 1MB。

  1. 这个-w标志在任何地方都有记录吗?它实际上有什么作用?

  2. 然后我发现了这个strip -s <binary>命令并在上面运行它,-w然后又减少了 750KB!生成的二进制文件运行良好。剥离在任何情况下都会引起问题吗?


米琪卡哇伊
浏览 454回答 3
3回答

慕慕森

如果使用 -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

该go help build说-ldflags&nbsp;'flag&nbsp;list' &nbsp;&nbsp;&nbsp;&nbsp;arguments&nbsp;to&nbsp;pass&nbsp;on&nbsp;each&nbsp;5l,&nbsp;6l,&nbsp;or&nbsp;8l&nbsp;linker&nbsp;invocation.所以,我们可以调用go tool 6l来查看它的所有选项。其中之一是-w&nbsp;&nbsp;disable&nbsp;DWARF&nbsp;generation顺便说一下,5l代表ARM (&nbsp;$GOARCH = arm),6l代表x86-64 (&nbsp;$GOARCH = amd64),8l代表x86 (&nbsp;$GOARCH = 386)。如果你真的想查看原始DWARF信息,你应该dwarfdump -a在 OS X 和objdump -wgLinux 上使用。警告!输出会很长,很长。

喵喔喔

你可以从&nbsp;go tool link$&nbsp;go&nbsp;tool&nbsp;link &nbsp;&nbsp;... &nbsp;&nbsp;-s&nbsp;&nbsp;&nbsp;&nbsp;disable&nbsp;symbol&nbsp;table &nbsp;&nbsp;-w&nbsp;&nbsp;&nbsp;&nbsp;disable&nbsp;DWARF&nbsp;generation
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go