2009-11-18 3 views

답변

13

이 가능하다 : (! 코드는 모든 일반적인 패키지가 공유하게 위)

go install -buildmode=shared -linkshared std 

을 다음

go install -buildmode=shared -linkshared userownpackage 

마지막으로 코드를 컴파일 할 때 다음을 실행해야합니다.

go build -linkshared yourprogram 

위의 내용은 정적으로 모든 것을 동적으로 연결하는 것이 아니라 훨씬 더 작은 컴파일 된 파일로 끝낼 것입니다. 정적 링크를 사용하는 "hello.go"파일은 2.3MB이고 동적 링크를 사용하는 동일한 코드는 12KB입니다.

+1

정답입니다. – 0x90

+0

이것이 내가 찾고있는 것입니다. 그러나'-buildmode = shared는 my mac에서 darwin/amd64에서 지원되지 않는다. '를 제공한다. – lvle

3

분명히 이제는 가능하지만 매우 정확한 상황에서만 가능합니다. 더 정확히 말하자면 Android 플랫폼 용으로 작성하는 경우입니다.

GitHub의 "goandroid"프로젝트는 Go가 Android NDK와 특정 용도로 공유 라이브러리를 빌드 할 수있게 해주는 패치 세트를 제공합니다. 공유 라이브러리로 구축 될 수

"이 모드에서 이동 패키지 또는 패키지 세트 하나를 가져 갈 프로그램 : 공유 라이브러리로 건물로 이동 패키지를 설명 https://github.com/eliasnaur/goandroid

+1

현재 (2013 년 7 월) 현재는 Go Tools의 확장이며 Google이 제공하는 Go 도구에는 포함되어 있지 않습니다. – Nate

+0

@ 네이트 확장 기능에 연결할 수 있습니까? 안드로이드에서만 (독립 실행 형) 확장 기능을 사용할 수 있습니까, 아니면 데스크톱에서도 사용할 수 있습니까? –

+0

@mihaistancu 안드로이드로 크로스 컴파일하기가 너무 어렵지 않다고 생각합니다. [here] (https://jasonplayne.com/programming-2/how-to-cross-compile-golang-for-android). golang 1.5가 iOS를 지원한다는 것을 고려하면 곧 공식적인 지원을받을 수 있습니다. – Nate

5

Go Execution Modes 참조하십시오. 이러한 Go 패키지는이 공유 라이브러리와 연결될 수 있습니다. 공유 라이브러리는 Go 프로그램이 링크되는 시간과 실행되는 시간 사이에 변경 될 수 있으며, 프로그램 시작시 사용할 수있는 공유 라이브러리가됩니다 used ...

Go 1.5 릴리스에서는 linux-amd64 대상에 대해서만 구현됩니다. gccgo를 사용하여 지원되는 모든 대상에 대해 구현됩니다. " 지금 당신이 처음이 명령을 실행하는 것입니다 필요가있는 무엇 -linkshared 플래그

사용

+0

나는이 질문으로 돌아와 업데이트를 작성했다. +1 –

관련 문제