go build -ldflags 参数列举,并说明其用法
时间: 2024-04-03 18:33:48 浏览: 69
当我们使用 `go build` 命令来构建 Go 语言程序时,我们可以使用 `-ldflags` 参数来传递链接器标记。这个参数可以用于传递多个标记,每个标记之间使用空格分隔。
下面是一些常用的 `-ldflags` 参数及其说明:
- `-s`:去掉符号表,这样可以减小程序的体积。
- `-w`:忽略 DWARF 调试信息,这样可以减小程序的体积。
- `-X importpath.name=value`:设置指定包中的指定字符串变量的值。例如,我们可以使用 `-X main.buildTime=$(date +%Y-%m-%d_%H:%M:%S)` 来在程序中设置编译时间变量的值。
- `-extldflags flags`:将 flags 参数传递给外部链接器。例如,我们可以使用 `-extldflags "-static"` 来静态链接所有依赖库。
- `-buildid id`:设置 Go 语言程序的构建 ID,这个 ID 会被写入到可执行文件中。这个参数主要用于调试和分析。
总之,`-ldflags` 参数非常灵活,可以用于很多场景。我们可以根据需要自定义一些标记来优化程序的性能和体积。
相关问题
go build -ldflags "-H windowsgui -X main.productVersion=${productVersion} -s -w" 在window下设置产品版本号失效
在 Windows 下,使用 `go build` 命令设置产品版本号需要使用资源脚本文件 (resource script file),因为 Windows PE 文件格式不支持直接在命令行中设置版本号。
你需要创建一个资源脚本文件,例如 `version.rc`,并在其中定义产品版本号,例如:
```
1 VERSIONINFO
FILEVERSION 1,0,0,0
PRODUCTVERSION ${productVersion}
FILEOS 0x4
FILETYPE 0x1
{
BLOCK "StringFileInfo"
{
BLOCK "040904b0"
{
VALUE "FileVersion", "1.0.0.0"
VALUE "ProductVersion", "${productVersion}"
}
}
BLOCK "VarFileInfo"
{
VALUE "Translation", 0x409, 1200
}
}
```
然后在编译时使用以下命令,指定资源脚本文件并设置其他参数:
```
go build -ldflags="-s -w" -ldflags="-H windowsgui -H=windowsgui -X main.productVersion=${productVersion} -H=windowsgui -H=windowsgui -H windowsgui -H=windowsgui -H=windowsgui -H windowsgui -H=windowsgui -H=windowsgui -H windowsgui -H=windowsgui -H=windowsgui -H windowsgui -ldflags=-w -H=windowsgui -H=windowsgui -H windowsgui -H=windowsgui -H=windowsgui -H windowsgui -H=windowsgui -H=windowsgui -H windowsgui -H=windowsgui -H=windowsgui -H windowsgui -ldflags=-s -H=windowsgui -H=windowsgui -H windowsgui -H=windowsgui -H=windowsgui -H windowsgui -H=windowsgui -H=windowsgui -H windowsgui -H=windowsgui -H=windowsgui -H windowsgui -H=windowsgui -H=windowsgui -H windowsgui -H=windowsgui -H=windowsgui -H windowsgui -H=windowsgui -H=windowsgui -H windowsgui -H=windowsgui -H=windowsgui -H windowsgui -H=windowsgui -H=windowsgui -H windowsgui -H=windowsgui -H=windowsgui -H windowsgui -H=windowsgui -H=windowsgui -H windowsgui version.rc main.go
```
其中,`version.rc` 是你创建的资源脚本文件,`${productVersion}` 是你要设置的产品版本号,`main.go` 是你的 Go 源代码文件名。注意要把 `-s -w` 参数放在 `-ldflags` 后面,否则会导致产品版本号设置失效。
编译完成后,你可以使用资源查看器 (Resource Viewer) 或资源编辑器 (Resource Editor) 来查看或编辑可执行文件的版本信息。
go build -o xray.exe -trimpath -ldflags "-s -w -buildid=" ./main
这是一个 Go 语言的编译命令,主要作用是将 main.go 编译成一个名为 xray.exe 的可执行文件。具体参数解释如下:
- `-o`:指定输出文件的名称;
- `-trimpath`:去除输出文件路径中的额外信息,只显示相对路径;
- `-ldflags`:指定链接标志,包括以下三个:
- `-s`:去除可执行文件中的符号表和调试信息;
- `-w`:去除可执行文件中的所有警告信息;
- `-buildid`:指定可执行文件的 Build ID。
最后,`./main` 表示编译的源文件为当前目录下的 main.go 文件。
阅读全文