[Golang] Las funciones y problemas del comando de compilación go ldflags -w -s

compilación cruzada de macos a linux
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags “-w -s” test.go

uno

go build es un comando utilizado en el lenguaje go para compilar código fuente en un ejecutable o biblioteca. El comando go build admite algunos parámetros opcionales, incluido el parámetro -ldflags.

El parámetro -ldflags se puede usar para pasar parámetros adicionales al compilador. Entre ellos, -w y -s son dos parámetros de uso común.

-w: elimina la información de depuración enana. reducirá el tamaño del ejecutable.
-s: elimina la información de la tabla de símbolos. Reducirá aún más el tamaño del ejecutable.
Por lo tanto, el uso del parámetro -ldflags "-w -s" puede eliminar tanto la información de depuración enana como la información de la tabla de símbolos, lo que reduce aún más el tamaño del archivo ejecutable. Esto es útil para algunos escenarios que necesitan reducir el volumen tanto como sea posible, como implementar aplicaciones en imágenes acoplables.

Sin embargo, debe tenerse en cuenta que después de eliminar la información de depuración y la información de la tabla de símbolos, si ocurre una excepción (como pánico), dificultará la depuración. Por lo tanto, no se recomienda utilizar los parámetros -w y -s durante la fase de desarrollo y depuración.

dos

-ldflags es una opción del compilador Go que puede agregar banderas al enlazador. Entre ellos, -w y -s respectivamente significan ignorar la tabla de símbolos e ignorar la información de depuración.

Específicamente, la opción -w le dice al enlazador que ignore la información de la tabla de símbolos, lo que puede reducir el tamaño del ejecutable, pero también significa que el ejecutable no se puede depurar dinámicamente en tiempo de ejecución. La opción -s le dice al enlazador que ignore la información de depuración, lo que también puede reducir el tamaño del archivo ejecutable, pero también hará que algunas funciones de depuración no estén disponibles.

El uso de la opción -ldflags nos permite controlar de manera más flexible el tamaño del archivo ejecutable y la función de depuración, pero debemos elegir el indicador apropiado según la situación específica.

Cabe señalar que el uso de los indicadores -w y -s puede afectar la capacidad de mantenimiento de su programa, ya que la información de depuración y la información de la tabla de símbolos son muy útiles para diagnosticar problemas y realizar ajustes de rendimiento. Por lo tanto, no recomendamos usar estos indicadores fuera de un entorno de producción.

¿Por qué el programa go puede encontrar el archivo fuente y el número de línea correspondiente a la función después de eliminar la información DWAFR?

El uso de la información de depuración de DWARF en el lenguaje Go es muy flexible. Puede incrustar información de depuración de DWARF en el programa en el momento de la compilación, y también puede obtener el nombre de la función, el nombre del archivo y el número de línea y otra información.
En el formato de archivo binario del lenguaje Go, cada función está incrustada con cierta metainformación, incluido el valor devuelto del nombre de la función y el tipo de parámetro, la dirección de entrada de la función e información de depuración, como el archivo y el número de línea. Esta información se puede leer desde los binarios de Go sin usar la información de depuración de DWARF.

¿Qué es enano en el idioma go?

En el lenguaje Go, DWARF (Depuración con formato de registro arbitrario) es un formato para depurar información. Contiene la tabla de símbolos del programa, el número de línea del código fuente, el nombre de la variable y la información de tipo, etc., que pueden proporcionar una ayuda útil al depurar el programa. Los archivos DWARF generalmente se generan junto con el ejecutable para la depuración si es necesario. El compilador del lenguaje Go generará automáticamente un archivo DWARF para proporcionar la información necesaria al momento de la depuración. Los archivos DWARF son un formato de depuración estándar ampliamente utilizado en muchos lenguajes de programación y sistemas operativos.

Supongo que te gusta

Origin blog.csdn.net/Kevin_Gates/article/details/130107710
Recomendado
Clasificación