1. 程式人生 > >四。Golang 交叉編譯

四。Golang 交叉編譯

一.golang支援在一個平臺下生成另一個平臺可執行程式的交叉編譯功能,

1.Mac下編譯Linux,windows平臺的64位可執行程式:

  CGO_ENABLE=0 GOOS=linux GOARCH=amd64 go build main.go

  CGO_ENABLE=0 GOOS=windows GOARCH=amd64 go build main.go

2.Linux下編譯Mac,Windows平臺的64位可執行程式:

  CGO_ENABLE=0 GOOS=darwin GOARCH=amd64 go build main.go

  CGO_ENABLE=0 GOOS=windows  GOARCH=amd64 go build main.go

3,Windows下編譯mac,Linux平臺64可執行程式:

  set CGO_ENABLE=0

  set GOOS=darwin

  set GOARCH=amd64

  go build main.go

 

  set CGO_ENABLE=0

  set GOOS=linux

  set GOARCH=amd64

  go build main.go

GOOS:目標可執行程式執行作業系統,支援darwin,freebsd,linux,windows

GOARCH:目標可執行程式操作程式系統架構,包括386,amd64,arm

二,windows編輯linux可執行程式,開啟cmd視窗,進入目標目錄,執行以上四條,生成一個二進位制檔案main,可直接在linux系統執行。

上傳至linux上,直接./maina會報錯,找不到指定檔案,因為需要授予可執行許可權:

  chmod  777 main

再次執行./main即可。

三,linux上執行go二進位制程式當作服務,例如使用golang ,gin寫restful風格介面,現在要開啟該服務,則需要不掛斷的執行該程式,使用nohup命令:

  nohup ./main &

開啟該服務,即開啟一個程序,可ps aux|grep main檢視程序序號,kill -9 程序序號,殺死程序。

四,若golang專案原始碼中需要引入配置檔案等,則在linux伺服器上,二進位制所在目錄下建立對應的目錄結構及檔案即可。