【问题标题】:How to build a release version binary in Go?如何在 Go 中构建发布版本的二进制文件?
【发布时间】:2015-06-18 09:39:34
【问题描述】:

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

【问题讨论】:

    标签: c go build release


    【解决方案1】:

    您可以通过使用指示链接器去除调试符号

    go install -ldflags '-s'
    

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

    Here 是所有链接器选项的完整列表。

    【讨论】:

      【解决方案2】:

      在 Go 中,通常没有调试版本或发布版本。

      默认情况下,go build 将符号和调试信息与二进制文件结合在一起。但是,您可以使用 go build -ldflags "-s -w" 删除符号和调试信息。

      【讨论】:

      • 这里有一些关于此的文档 - golang.org/doc/gdb#Introduction
      • 你是对的,但我认为剥离符号并不常见是有充分理由的——例如,如果您收到有关野外恐慌的报告,最好有符号用于信息堆栈跟踪。
      • 我认为“-s”(省略符号表和调试信息)已经包含“-w”(省略 DWARF 符号表),因此不需要同时指定两者。使用我尝试过的可执行文件,“-s -w”的大小与单独的“-s”完全相同。
      • 看来-s不会影响GOOS=darwin
      • 刚刚在我的 Mac 上做了一些实验。结果:-s 并不意味着 -w,带/不带 -s 的二进制大小是相同的。 -w 将二进制文件从 12 减少到 8MB。另外:“go build”和“-s -w”构建之间的堆栈跟踪没有区别。当然这只是针对我的软件,可能有一些极端情况。
      猜你喜欢
      • 1970-01-01
      • 2023-03-04
      • 1970-01-01
      • 2010-09-18
      • 2020-06-16
      • 2016-12-22
      • 1970-01-01
      • 2022-01-07
      • 1970-01-01
      相关资源
      最近更新 更多