GoのHello worldは次のとおりです。
package main
import (
"fmt"
)
func main() {
fmt.Println("Go is great!")
}
それを入れて、次のようhello.go
にコンパイルします。
go build -o hello_go_build hello.go
go build -o hello_go_build_gccgo --compiler gccgo hello.go
gccgo -o hello_gccgo_shared hello.go
gccgo -static -o hello_gccgo_static hello.go
まず、サイズが違うことhello_go_build_gccgo
に気づきました。hello_gccgo_shared
インターネットで情報を探しましたが、うまくいきませんでした。それがなぜなのか誰か知っていますか?またはさらに良いことに、それを理解する方法を誰か教えてくれませんか? フラグを付けて一時ファイルを保持しようとしました-work
が、関連する情報を見つけることができませんでした。
次に、お気づきかもしれませんが、静的にリンクされた 2 つのバイナリも同じサイズではありません。実際、go build
( hello_go_build
) コマンドでコンパイルされたものは、私のシステムだけでなく、他の Linux ディストリビューションを使用する他のシステムでも機能しますが、私のシステムだけでなく他のシステムでもhello_go_build_gccgo
エラーで失敗します。
panic: runtime error: invalid memory address or nil pointer dereference
これは解決しようとしているバグです: https://groups.google.com/forum/?fromgroups=#!topic/golang-nuts/y2RIy0XLJ24
最後に、今日ではサイズはもはや問題ではありませんが、私は興味があります:関数レベルのリンクを行うためのgoコンパイラの誰かとのオプションはありますか(パッケージ全体を静的にリンクする代わりに、必要な関数とその依存関係のみをリンクします) )?