2009-11-18 25 views

答えて

13

これは、あなたがする必要がどのような-linksharedフラグに

を使用すると、最初にこのコマンドを実行することであることが可能になりました:

go install -buildmode=shared -linkshared std 

(コードの上にすべての一般的なパッケージが共有可能になります!)そして

go install -buildmode=shared -linkshared userownpackage 

最後にコードをコンパイルするときは、実行する必要があります。

go build -linkshared yourprogram 

静的にすべてをリンクするのではなく、動的にそれらをリンクするだけで、コンパイルされたファイルはずっと小さくなります。静的リンクを使った私の "hello.go"ファイルは2.3MBで、動的リンクを使った同じコードは12KBです!

+1

正解です。 – 0x90

+0

これは私が探していたものです。しかし、私のmacでは '-buildmode = sharedはdarwin/amd64でサポートされていません。 – lvle

3

明らかに、これは可能ですが、非常に正確な状況の下でのみ可能です。もっと正確に言えば、あなたがAndroidプラットフォームのために書いているなら。

GitHubの "goandroid"プロジェクトには、Android NDKで特定の用途に使用するための共有ライブラリをGoが作成できるようにする一連のパッチが用意されています。共有ライブラリとして構築することができる、

「このモードでゴーパッケージ、またはパッケージのセット1またはをインポート囲碁プログラムを:共有ライブラリとしてビルゴーパッケージの説明https://github.com/eliasnaur/goandroid

+1

現時点(2013年7月)は、Goツールの拡張機能であり、Googleが提供するGoツールには組み込まれていません。 – Nate

+0

@Nateあなたはエクステンションにリンクできますか?アンドロイド上でのみ(スタンドアローン)拡張機能を使用できますか、またはデスクトップ用にも使用できますか? –

+0

@mihaistancu私はそれがあまりにもクロスコンパイルすることは難しいとは思わないアンドロイドのために行く、[ここ](https://jasonplayne.com/programming-2/how-to-cross-compile-golang-for-androidを参照してください)。 golang 1.5がiOSをサポートしていることを考慮すると、すぐに正式なサポートを受けることができました。 – Nate

5

Go Execution Modes参照してください。共有ライブラリは、Goプログラムがリンクされてから実行されるまでの間に変更されることがありますが、プログラムの開始時に利用可能な共有ライブラリは、 used ...

Go 1.5リリースでは、これはlinux-amd64ターゲットでのみ実装されています。 gccgoを使用すると、サポートされているすべてのターゲットに実装されます。

+0

私はこの質問に戻ってアップデートを書きました。 +1 –

関連する問題