Go build ldflags 参数说明

5 min read
go build -ldflags="-s -w" -o /app/main.go ./main.go

这是一条在编译 Go 程序时使用的命令。它执行了以下操作:

  1. 使用 "-ldflags" 参数,传入 "-s -w"。这会让编译器忽略符号表和 DWARF 调试信息,减小二进制文件的大小。
  2. 使用 "-o" 参数,指定输出文件名为 "/app/main.go"。
  3. 最后一个参数 "./main.go" 指定了要编译的源码文件。

这条命令将编译 Go 程序,并将二进制文件输出到 /app/main.go,编译后的文件大小会比较小。

符号表是什么

符号表是一种数据结构,用于存储程序中各种符号的名称和它们对应的地址。

在编译器和链接器的工作过程中,符号表用于记录源码中的标识符(如变量名、函数名等)与它们在目标代码中对应的位置之间的映射关系。

在调试器中,符号表可以用来定位程序中某一行代码对应的汇编指令,或者某一个函数或者变量在源码中对应的位置。

符号表也可以用于动态链接库的符号解析,在运行时加载库时需要符号表来进行符号解析。

DWARF 调试信息是什么

DWARF (Debugging With Arbitrary Record Formats) 是一种用于存储程序调试信息的格式。它主要用于记录程序中变量、类型、函数和行号的信息,供编译器、链接器和调试器使用。

DWARF 信息包含在程序的可执行文件或者库文件中,调试器可以使用这些信息来定位源码中的某一行对应的机器代码,或者某一个变量或函数在源码中对应的位置。 DWARF信息还可以用于调试器和分析工具来支持跟踪程序执行流程、查看变量值、设置断点等功能。