go 빌드방법 질문

827 views
Skip to first unread message

Hunmin

unread,
Jun 2, 2012, 3:19:59 AM6/2/12
to golang...@googlegroups.com
go 환경설정 (go env) 을 확인해 보니 GOGCCFLAGS="-g -O2 -fPIC -m64 -pthread" 이렇게 -g 디버그 정보옵션이 포함이 되어있습니다.

그래서 export 를 사용해서 GOGCCFLAGS를 변경을 해도 적용이 되지 않더군요.

보통 go를 deploy할경우 빌드를 어떤 방법으로 하나요?

Jongmin Kim

unread,
Jun 3, 2012, 10:09:30 PM6/3/12
to golang...@googlegroups.com
GOGCCFLAGS는 $GOROOT/src/cmd/go/build.go에서 만들기때문에 쉘에서 export로 변경해도 매번 go env로 확인해서는 바뀌지 않습니다.
그런데 굳이 디버깅 심볼을 제거하려는 이유가 있나요? 어떤 문제를 해결하려고 하시는지 좀더 자세한 상황을 공유해주시면 모두에게 도움이 될 것 같습니다.

2012년 6월 2일 토요일 오후 4시 19분 59초 UTC+9, Hunmin 님의 말:
Message has been deleted

Hunmin

unread,
Jun 3, 2012, 10:49:05 PM6/3/12
to golang...@googlegroups.com
네. 말씀감사합니다. GOGCCFLAGS는 readonly군요.

디버그 옵션을 제거하려는 이유는 배포단계까지 가면 디버그정보가 필요가 없기때문에 디버깅 정보를 제거함으로써 
수행속도(코드사이즈를 줄임으로써 메모리에 로드되는속도)와 메모리 사용량(코드에 포함되는 디버그정보)를 줄이기 위합니다.

참고로 간단한 "Hello, World" 프로그램을 strip 명령어로 불필요코드를 제거할경우 1,241KB -> 880KB로 바이너리 크기가 29%감소하였습니다.

2012년 6월 4일 월요일 오전 11시 9분 30초 UTC+9, Jongmin Kim 님의 말:

Eunseok Eom

unread,
Jun 4, 2012, 12:11:39 AM6/4/12
to golang...@googlegroups.com
안녕하세요?

go install -ldflags "-s" [gofile]
debugging symbol 을 제거한 바이너리를 생성합니다. Makefile 등에 적절하게 사용하시면 되겠네요.

GOGCCFLAGS는 fpic으로 보아  cgo에 관련된 라이브러리 제작에 이용되는 플래그가 아닐까 싶습니다.

Hunmin

unread,
Jun 4, 2012, 1:13:27 AM6/4/12
to golang...@googlegroups.com
아, 감사합니다. build 또한 옵션을 보니 링커옵션을 지정할수 있었네요. 진작에 help를 봤어야하는건데.

go build -ldflags "-s" [gofile]

깔끔하게 심볼정보 없어지면서 사이즈는 대략 50%감소되었네요

GOGCCFLAGS옵션을 말씀하신게 맞는것같네요 미쳐 -fPIC옵션을 생각을 못했습니다.

2012년 6월 4일 월요일 오후 1시 11분 39초 UTC+9, Eunseok Eom 님의 말:
Reply all
Reply to author
Forward
0 new messages