2015-11-23 61 views
24

假設我主要是Linux用戶,但我正在開發一個應用程序,我想要跨平臺。我四處搜尋,但我似乎無法找到信息,以免除下列內容:Golang二進制文件是否可移植?

  1. 如果我go install我的AMD64的Ubuntu系統上的二進制文件,將它也別人的 64位的Ubuntu工作/ Debian系統?
  2. 如何使用go install構建x86_64二進制文件,該文件也可以在32位Debianlikes上運行?
  3. 如果我必須使用Windows來創建一個可以在Windows上運行的二進制文件,那麼我怎樣才能確保即使我的Windows系統是64位的可執行文件將爲x86_64構建?

我的問題實際上歸結爲「如何靜態/便攜是去鏈接器/編譯器?」

+1

我不知道你在問什麼。二進制文件可以在具有相同操作系統和體系結構的系統間移植Go爲您的主機GOOS和GOARCH構建二進制文件,除非您另有指定。你不能把一個64位的二進制文件在32位系統上運行。 – JimB

+0

這並不是我的創建二進制文件的經驗,而這些二進制文件是跨平臺的。 – cat

+2

回答你的問題:「一點都不。」僅僅因爲這是不可能的。沒有編譯器/鏈接器/加載器/工具鏈可以做到這一點。 Google的交叉編譯對於Go來說是微不足道的。 – Volker

回答

32
  1. 是的,它會;基本上所有爲64位Linux編譯的二進制文件都是如此,而不僅僅是用Go編寫的文件(共享庫除外,Go不依賴於這些文件)
  2. 您可以在構建之前設置GOOSGOARCH環境變量:GOOS=windows GOARCH=386 go build (或go install或其他)等
  3. 默認情況下,二進制將建爲您正在運行的系統,但是這是沒有必要的 - 見2
相關問題