>  기사  >  백엔드 개발  >  Docker Scratch를 사용하여 Golang에서 정적 바이너리를 만드는 방법: CGO_ENABLED=0 및 -ldflags?

Docker Scratch를 사용하여 Golang에서 정적 바이너리를 만드는 방법: CGO_ENABLED=0 및 -ldflags?

Linda Hamilton
Linda Hamilton원래의
2024-10-30 04:59:28615검색

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

Golang에서 정적 바이너리를 생성하기 위한 플래그

Docker 스크래치 베이스를 사용하여 Golang에서 정적 바이너리를 빌드하는 경우 CGO_ENABLED를 모두 포함하는 것이 중요합니다. =0 및 -ldflags '-extldflags "-static"' 플래그. 두 옵션 모두 중복되는 것처럼 보일 수 있지만 정적 바이너리를 구현하는 데 서로 다른 역할을 합니다.

CGO_ENABLED=0

이 플래그는 Go 런타임에서 C 코드 사용을 비활성화합니다. CGO(C Go)를 사용하면 Go 프로그램 내에서 C 코드와 인터페이스할 수 있습니다. CGO_ENABLED=0을 설정하면 Go가 C 라이브러리와 연결을 시도하는 것을 방지하여 빌드된 바이너리가 자급자족할 수 있도록 합니다.

-ldflags '-extldflags "-static"'

이 플래그는 외부 라이브러리를 링크할 때 -static 옵션을 사용하도록 링커에 지시합니다. -static은 링커에게 런타임 환경에 존재하는 종속성에 의존하는 대신 바이너리 내에 정적으로 모든 종속성을 포함하도록 지시합니다. 이렇게 하면 런타임 라이브러리 조회가 필요 없고 바이너리가 외부 라이브러리 가용성과 독립적이 됩니다.

두 플래그를 결합하면 빌드된 바이너리가 Go 런타임과 내부에 필요한 외부 종속성을 모두 포함하여 완전히 정적인지 확인할 수 있습니다. 실행 가능한 코드입니다. 이를 통해 추가 런타임 구성 요소나 동적 연결 없이도 모든 환경에서 바이너리를 실행할 수 있습니다.

위 내용은 Docker Scratch를 사용하여 Golang에서 정적 바이너리를 만드는 방법: CGO_ENABLED=0 및 -ldflags?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.