我注意到當使用go build
時,二進制結果可能超過2MB;但使用gccgo
二進制小於35k。如何使用gccgo構建完整的go程序二進制文件?
,我使用gccgo
時注意到的另一個問題是,所產生的二進制文件沒有其他的Linux中運行的(缺少libgo.so
我相信),但go build
二進制運行就好了(所以我想象它因爲二進制包括所有是否需要運行?);有沒有辦法與gccgo
做到這一點?
我注意到當使用go build
時,二進制結果可能超過2MB;但使用gccgo
二進制小於35k。如何使用gccgo構建完整的go程序二進制文件?
,我使用gccgo
時注意到的另一個問題是,所產生的二進制文件沒有其他的Linux中運行的(缺少libgo.so
我相信),但go build
二進制運行就好了(所以我想象它因爲二進制包括所有是否需要運行?);有沒有辦法與gccgo
做到這一點?
您可以鏈接libgo靜態,同時還連接系統庫動態,通過使用-static-libgo選項。 (這僅適用於gccgo)。
如果使用go 1.8或更高版本,如果使用CGO_ENABLED=1
(默認爲1)構建,則本地編譯會動態鏈接。通過運行go env CGO_ENABLED
來檢查此變量。 運行go build時,可以通過將環境變量CGO_ENABLED設置爲0來切換到靜態鏈接。
CGO_ENABLED=0 go build
順便說一句,交叉編譯自動使用靜態鏈接。
鏈接與靜態 – fuz 2013-03-26 16:02:06
糟糕,只是注意到它已在此評論中回答... – mna 2013-03-26 17:35:15