반응형
2021년 4월 Golang 의 최신 버전은 1.16.x 입니다.
go 프로그램을 실행파일로 컴파일 하면 default 는 dynamic library 로 만들어 집니다.
아무리 OS 와 architecture 에 맞춰서 cross compile 을 했다고 해도 링크된 모듈이 존재하지 않으면 에러가 납니다.
특히 docker 로 실행할 경우 이런 문제를 자주 겪게 됩니다.
1.15 버전 이상에서는 CGO_ENABLED=0 환경 변수로 static library 로 만들 수 있습니다. 참고로 1.14 버전 이하에서는 -tags 옵션을 사용할 수 있습니다.
아래 Makefile 은 이 부분을 고려해서 만들었습니다.
GOOS는 OS 의 종류를 GOARCH 는 Architecture 에 맞춰 실행파일을 만듭니다.
$ vi Makefile
.PHONY: build clean docker
default: build
all: build docker
build: build-darwin build-linux
build-darwin:
CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build -o bin/tksinfo-darwin-amd64 ./cmd/server.go
CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build -o bin/tksinfo-appclient-darwin-amd64 ./examples/application/client.go
build-linux:
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o bin/tksinfo-linux-amd64 ./cmd/server.go
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o bin/tksinfo-appclient-linux-amd64 ./examples/application/client.go
clean:
rm -rf ./bin
docker:
docker build --no-cache -t seungkyua/tksinfo -f Dockerfile .
반응형