這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
什麼是跨平台交叉編譯
交叉編譯
通俗地講就是在一種平台上編譯出其他幾個平台能夠啟動並執行程式(通常指系統和CPU架構的不同)
交叉編譯通常使用在分發時,編譯出多個平台可用的二進位程式,比如在Linux下編譯出可以在Win下可以使用的EXE程式。
本地編譯
本地編譯是指當前系統所配置編譯器根據當前系統配置編譯出在當前系統所適用的執行程式(部分其他語言本地編譯時間可能會由於擴充包含的問題,無法在同平台其他機器運行)。
所以如果要產生在非原生其他平台和系統的程式,就需要用到交叉編譯(交叉編譯工具鏈)。
交叉編譯工具鏈
> 交叉編譯工具鏈是一個由編譯器、連接器和解譯器組成的綜合開發環境,交叉編譯工具鏈主要由binutils、gcc和glibc 3個部分組成。
> 有時出於減小 libc 庫大小的考慮,也可以用別的 c 庫來代替 glibc,例如 uClibc、dietlibc 和 newlib。
Golang 的跨平台交叉編譯
Go語言是編譯型語言,可以將程式編譯後在將其拿到其它作業系統中運行,此過程只需要在編譯時間增加對其它系統的支援。
交叉編譯依賴下面幾個環境變數
- GOARCH 目標平台(編譯後的目標平台)的處理器架構(386、amd64、arm)
- GOOS 目標平台(編譯後的目標平台)的作業系統(darwin、freebsd、linux、windows)
各平台的GOOS和GOARCH支援情況
GOOS |
GOARCH |
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 |
Golang交叉編譯步驟(可跳過)
> 首先進入$GOROOT/go/src 源碼所在目錄,執行如下命令建立目標平台所需的包和工具檔案
# 如果你想在Windows 32位系統下運行cd $GOROOT/srcCGO_ENABLED=0 GOOS=windows GOARCH=386 ./make.bash# 如果你想在Windows 64位系統下運行cd $GOROOT/srcCGO_ENABLED=0 GOOS=windows GOARCH=amd64 ./make.bash# 如果你想在Linux 32位系統下運行cd $GOROOT/srcCGO_ENABLED=0 GOOS=linux GOARCH=386 ./make.bash# 如果你想在Linux 64位系統下運行cd $GOROOT/srcCGO_ENABLED=0 GOOS=linux GOARCH=amd64 ./make.bash
交叉編譯當前項目
# 如果你想在Windows 32位系統下運行CGO_ENABLED=0 GOOS=windows GOARCH=386 go build test.go# 如果你想在Windows 64位系統下運行CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build test.go# 如果你想在Linux 32位系統下運行CGO_ENABLED=0 GOOS=linux GOARCH=386 go build test.go# 如果你想在Linux 64位系統下運行CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build test.go
上面命令中的 CGO_ENABLED = 0 表示設定CGO工具不可用;GOOS 表示程式構建環境的目標作業系統(Linux、Windows);GOARCH 表示程式構建環境的目標計算架構(32位、64位);
現在你可以在相關目標作業系統上運行編譯後的程式了。
連結
關于于 Go 的跨平台交叉編譯淺析交叉編譯