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 중국어 웹사이트의 기타 관련 기사를 참조하세요!