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 런타임과 내부에 필요한 외부 종속성을 모두 포함하여 완전히 정적인지 확인할 수 있습니다. 실행 가능한 코드입니다. 이렇게 하면 추가 런타임 구성 요소나 동적 연결 없이도 모든 환경에서 바이너리를 실행할 수 있습니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3