交叉編譯 Go 程序

前言

Go 是支持交叉編譯的.即在 Ubuntu 下開發,再編譯成 Windows 下可以運行的程序,而且還可在 32 位或 64 位之間轉換.

生成目標平臺的包和工具

Go 提供了不同平臺和架構需要用到的包和工具, 但是安裝 Go 時默認只編譯了當前平臺所需要的包和工具.所以需要編譯目標平臺的包和工具.

#切換至 GOROOT 下的 src 目錄
cd GOROOT/src
#編譯生成 Windows 64 位 平臺的包和工具
CGO_ENABLED=0 GOOS= windows GOARCH= amd64 ./make.bash
#等待編譯結束,
#在 GOROOT/bin 目錄下會生成 windows_amd64 目錄,該目錄內含該平臺相應的工具
cd GOROOT/bin/windows_amd64/ && ls
#在 GOROOT/pkg 目錄下會生成 windows_amd64 目錄,該目錄內含該平臺相應的包
#目錄命名規則: 平臺 + "_" + 架構 
cd GOROOT/pkg/windows_amd64 && ls  

批量生成所有平臺的包和工具

若想生成所有支持平臺的包和工具,一種方法是參照上一節介紹的方法分別替換GOOSGOARCH 的值依次生成.或使用 Github 上的 golang-crosscompile 工具:

git clone git://github.com/davecheney/golang-crosscompile.git  
git clone git://github.com/davecheney/golang-crosscompile.git  
#啓用
source golang-crosscompile/crosscompile.bash  
#編譯生成所有平臺的包和工具
go-crosscompile-build-all

該工具我沒有試過進供參考. 詳細說明請訪問作者博客.

驗證

# 編譯生成目標平臺程序,以下代碼將生成 hello.exe
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build hello.go 
# 生成成功後將 `hello.exe ` 複製至目標平臺下即可運行.

附: 各平臺的 GOOSGOARCH 的可選值

OS      ARCH            OS version
linux   386/amd64/arm   >= Linux 2.6
darwin  386/amd64       OS X (Snow Leopard + Lion)
freebsd 386/amd64       >= FreeBSD 7
windows 386/amd64       >= Windows 2000

參考文檔

  • An introduction to cross compilation with Go
  • 如何在32位linux下进行交叉编译?
  • 跨平台编译Go程序(交叉编译)

你可能感兴趣的:(Go,交叉編譯)