2009-11-18 80 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 2016-02-20 05:32:11

+0

這就是我一直在尋找的東西。但是在我的mac上給出了'-buildmode = shared不支持darwin/amd64'。 – lvle 2017-05-06 16:40:36

3

顯然,它現在是可能的,但只有在非常精確的情況下。更確切地說,如果您正在爲Android平臺編寫代碼。

GitHub上的「goandroid」項目提供了一組補丁程序,允許Go爲Android NDK特定使用構建一個共享庫。見https://github.com/eliasnaur/goandroid

+1

截至現在(2013年7月),它是Go Tools的擴展,並未嵌入到Google發佈的Go Tools中。 – Nate 2013-07-13 04:02:35

+0

@Nate你能鏈接到擴展名嗎? (獨立的)擴展只能在android上使用,還是可以在桌面上使用? – 2015-07-08 19:57:16

+0

@mihaistancu我想它不會太難交叉編譯去Android,看看[這裏](https://jasonplayne.com/programming-2/how-to-cross-compile-golang-for-android )。考慮到golang 1.5支持iOS,可以很快獲得官方支持。 – Nate 2015-07-09 21:37:30

5

Go Execution Modes介紹大廈轉到包作爲共享庫

「在這種模式下圍棋包,或一組包,也可以作爲共享庫導入一個或Go程序。更多的Go包可能會與這個共享庫鏈接,共享庫可能會在Go程序鏈接到運行時間之間更改;程序啓動時可用的共享庫將是使用...

在Go 1.5發行版中,這僅針對linux-amd64目標實現。使用gccgo它可以針對任何支持的目標實現。「

+0

我回到這個問題來寫更新了。 +1 – 2015-08-27 10:19:56