如何在Go中构建发布版本的二进制文件?

cat*_*mia 31 c release build go

在C中,我们可以构建二进制文件的调试版本或发行版本(目标文件和可执行文件).我们怎么能在Go中做到这一点?

小智 53

在Go中,通常不具有调试版本或发行版本.

默认情况下,go build将符号和调试信息与二进制文件组合.但是,您可以删除符号和调试信息go build -ldflags "-s -w".

  • 你是对的,但我认为有一个很好的理由,它不是典型的剥离符号 - 例如,如果你得到一个惊慌失措的报告,例如,那里有符号的信息堆栈跟踪会很棒. (3认同)
  • 我认为"-s"(省略符号表和调试信息)已经包含"-w"(省略DWARF符号表),因此不需要同时指定两者.使用可执行文件我尝试了这个,"-s -w"给出与"-s"完全相同的大小. (3认同)
  • 这里有一些关于此的文档 - https://golang.org/doc/gdb#Introduction。 (2认同)
  • 看起来 -s 不会影响 GOOS=darwin (2认同)
  • 刚刚在我的 Mac 上做了一些实验。结果:-s 并不意味着 -w,带/不带 -s 的二进制大小是相同的。-w 将二进制文件从 12MB 减少到 8MB。另外:“go build”和“-s -w”构建之间的堆栈跟踪没有区别。当然,这仅适用于我的软件,可能存在极端情况。 (2认同)

rob*_*b74 10

您可以指示链接器使用剥离调试符号

go install -ldflags '-s'
Run Code Online (Sandbox Code Playgroud)

我只是在一个相当大的可执行文件(GXUI样本之一)上尝试过,这将它从~16M减少到~10M.一如既往,您的里程可能会有所不同

以下是所有链接器选项的完整列表.