2009-11-18 35 views

Respuesta

13

Esto es posible ahora usando la bandera -linkshared

Lo que hay que hacer es ejecutar primero este comando: (Por encima de código hace que todos los paquetes comunes compartible)

go install -buildmode=shared -linkshared std 

continuación

go install -buildmode=shared -linkshared userownpackage 

finalmente al compilar el código que necesita ejecutar:

go build -linkshared yourprogram 

Lo anterior es ahora que en lugar de vincular estáticamente todo solo los vincula dinámicamente y terminará con archivos compilados mucho más pequeños. ¡Solo para darle una idea, mi archivo "hello.go" con enlaces estáticos es de 2.3MB, mientras que el mismo código que usa enlaces dinámicos es de solo 12KB!

+1

La respuesta correcta. – 0x90

+0

esto es lo que estaba buscando. Pero da '-buildmode = shared no compatible en darwin/amd64' en mi mac. – lvle

3

Aparentemente, ahora es posible, pero solo bajo circunstancias muy precisas. Más precisamente, si estás escribiendo para la plataforma Android.

El proyecto "goandroid" en GitHub proporciona un conjunto de parches que permiten a Go crear una biblioteca compartida para uso específico con el NDK de Android. Ver https://github.com/eliasnaur/goandroid

+1

Al igual que ahora (julio de 2013), es una extensión de las herramientas Go y no está integrada en las herramientas Go que Google envía. – Nate

+0

@Nate ¿puede vincular a la extensión? ¿La extensión (independiente) solo se puede usar en Android o también está disponible para escritorio? –

+0

@mihaistancu Me imagino que no sería muy difícil hacer una compilación cruzada para Android, mira [aquí] (https://jasonplayne.com/programming-2/how-to-cross-compile-golang-for-android) Podría obtener soporte oficial pronto, considerando que golang 1.5 es compatible con iOS. – Nate

5

Go Execution Modes describe Construyendo paquetes Go como una biblioteca compartida:

"En este modo un paquete Go, o un conjunto de paquetes, puede ser construido como una biblioteca compartida Un programa Go que importa uno o. más de esos paquetes Go pueden vincularse con esta biblioteca compartida. La biblioteca compartida puede cambiarse entre el momento en que se vincula el programa Go y la hora en que se ejecuta; la biblioteca compartida que está disponible cuando se inicia el programa es la que se utilizará. usado ...

En la versión Go 1.5 esto se implementa solo para el destino linux-amd64. usando gccgo se implementa para cualquier objetivo compatible ".

+0

Volví a esta pregunta para escribir una actualización también. +1 –

Cuestiones relacionadas