2009-11-18 17 views

Antwort

13

Dies ist möglich, jetzt -linkshared Flagge

mit Was Sie tun müssen, ist zunächst diesen Befehl ausführen: (! Above Code alle gängigen Pakete gemeinsam nutzbar macht)

go install -buildmode=shared -linkshared std 

dann

go install -buildmode=shared -linkshared userownpackage 

schließlich, wenn Ihr Code kompilieren müssen Sie ausführen:

go build -linkshared yourprogram 

Was die oben genannten ist es jetzt eher als statisch verknüpfen alles nur dynamisch verbindet sie und Sie werden mit viel kleineren kompilierten Dateien enden. Um Ihnen eine Idee zu geben, meine "hello.go" Datei mit statischem Linking ist 2,3 MB, während der gleiche Code mit dynamischem Linking nur 12 KB ist!

+1

Die richtige Antwort. – 0x90

+0

das ist, was ich gesucht habe. Aber gibt '-buildmode = shared nicht unterstützt auf darwin/amd64' auf meinem Mac. – lvle

3

Offenbar ist es jetzt möglich, aber nur unter sehr genauen Umständen. Genauer gesagt, wenn Sie für die Android-Plattform schreiben.

Das "Goandroid" -Projekt auf GitHub bietet eine Reihe von Patches, mit denen Go eine gemeinsam genutzte Bibliothek für die spezifische Verwendung mit dem Android NDK erstellen kann. Siehe https://github.com/eliasnaur/goandroid

+1

Ab sofort (Juli 2013), es ist eine Erweiterung zu den Go Tools und nicht in die Go Tools, die von Google ausgeliefert wird. – Nate

+0

@Nate können Sie mit der Erweiterung verknüpfen? Ist die (stand alone) Erweiterung nur für Android verfügbar oder ist sie auch für den Desktop verfügbar? –

+0

@mihanstancu Ich denke, es wäre nicht zu schwierig, Cross-Compile für Android zu gehen, siehe [hier] (https://jasonplayne.com/programming-2/how-to-cross-compile-golang-for-android). Könnte bald offiziellen Support bekommen, wenn man bedenkt, dass golang 1.5 iOS unterstützt. – Nate

5

Go Execution Modes beschreibt Gebäude Go-Pakete als gemeinsam genutzte Bibliothek:

„In diesem Modus wird ein Go-Paket oder die Pakete festlegen, kann als gemeinsam genutzte Bibliothek gebaut werden, um ein Go-Programm, das eines importiert oder. mehr dieser Go-Pakete können mit dieser gemeinsam genutzten Bibliothek verknüpft werden Die geteilte Bibliothek kann zwischen dem Zeitpunkt, zu dem das Go-Programm verknüpft ist, und dem Zeitpunkt der Ausführung geändert werden, wobei die beim Start des Programms verfügbare gemeinsame Bibliothek die gleiche ist used ...

In der Go 1.5-Version ist dies nur für das linux-amd64-Ziel implementiert mit gccgo wird es für jedes unterstützte Ziel implementiert. "

+0

Ich kam auf diese Frage zurück, um auch ein Update zu schreiben. +1 –

Verwandte Themen