Home  >  Article  >  Backend Development  >  How to Create Static Binaries in Golang with Docker Scratch: CGO_ENABLED=0 and -ldflags?

How to Create Static Binaries in Golang with Docker Scratch: CGO_ENABLED=0 and -ldflags?

Linda Hamilton
Linda HamiltonOriginal
2024-10-30 04:59:28615browse

 How to Create Static Binaries in Golang with Docker Scratch: CGO_ENABLED=0 and -ldflags?

Flags to Create Static Binaries in Golang

When building a static binary in Golang using the Docker scratch base, it's essential to include both CGO_ENABLED=0 and -ldflags '-extldflags "-static"' flags. While both options may seem redundant, they play distinct roles in achieving static binaries.

CGO_ENABLED=0

This flag disables the use of C code in the Go runtime. CGO (C Go) allows interfacing with C code within Go programs. By setting CGO_ENABLED=0, you prevent Go from attempting to link with any C libraries, ensuring that the built binary is self-sufficient.

-ldflags '-extldflags "-static"'

This flag instructs the linker to use the -static option when linking external libraries. -static tells the linker to include all dependencies statically within the binary, rather than relying on them to be present in the runtime environment. This eliminates the need for runtime library lookups and makes the binary independent of external library availability.

By combining both flags, you ensure that the built binary is fully static, containing both the Go runtime and any necessary external dependencies within its executable code. This ensures that the binary can be executed in any environment without requiring additional runtime components or dynamic linking.

The above is the detailed content of How to Create Static Binaries in Golang with Docker Scratch: CGO_ENABLED=0 and -ldflags?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn