Go語言交叉編譯工具gox
基本介紹
交叉編譯是為了在不同平臺編譯出其他平臺的程式,比如在Linux編譯出Windows程式,在Windows能編譯出Linux程式,32位系統下編譯出64位程式,今天介紹的gox就是其中一款交叉編譯工具。
配置環境
首先配置好Go語言的環境變數,並在~/.bash_profile
中設定,簡單說明一下為什麼要新增至該檔案,首先以下程式碼在終端執行完成後只對當前會話有效,關閉終端變數就失效了,而.bash_profile
檔案在使用者每次登入時都會執行一次,把環境變數設定到該檔案中,每次登入都會初始化環境變數。當然,放在~/.bashrc
中也是可以的,它不僅會在登入時執行,還會在每次開啟終端時執行。
export GOPATH=${HOME}/go
export GOROOT=/usr/local/go
export GOBIN=${GOPATH}/bin
export PATH=${PATH}:${GOBIN}
GOROOT與GOPATH要根據自身情況設定,不要盲目跟從,設定完成後若要該檔案立即生效,可以執行source
命令。
source ~/.bash_profile
如果你的終端裝了zsh
,可能重新開啟終端後依然會失效,那麼可以在~/.zshrc
檔案的最後一行追加上source
指令。
source ~/.bash_profile
gox的安裝
在終端執行以下指令進行安裝。
go get github.com/mitchellh/gox
安裝結束後,執行gox -h
,如果有展示幫助資訊,代表安裝成功。
➜ ~ gox -h
Usage: gox [options] [packages]
Gox cross-compiles Go applications in parallel.
If no specific operating systems or architectures are specified, Gox
will build for all pairs supported by your version of Go.
......
gox的使用
按照慣例,我們先祭出hello,world
的演示程式碼。
package main
import "fmt"
func main() {
fmt.Print("hello,world")
}
此時進入專案中的工作目錄($GOPATH/src/[你的專案名]),直接執行gox
命令,會生成多達21個不同平臺的可執行檔案,橫跨linux、windows、freebsd、darwin等系統。
➜ hello gox
Number of parallel builds: 3
--> linux/amd64: hello
--> openbsd/amd64: hello
--> darwin/386: hello
--> linux/mipsle: hello
--> windows/386: hello
--> windows/amd64: hello
--> darwin/amd64: hello
--> linux/386: hello
--> linux/s390x: hello
--> netbsd/386: hello
--> linux/arm: hello
--> freebsd/386: hello
--> netbsd/amd64: hello
--> freebsd/arm: hello
--> freebsd/amd64: hello
--> openbsd/386: hello
--> linux/mips64: hello
--> linux/mips: hello
--> linux/mips64le: hello
--> netbsd/arm: hello
但我並不想一次生成所有平臺的程式,這時就需要gox的引數進行指定,如下所示,os
引數指定要生成的系統名稱,arch
指定CPU的架構。
gox -os "windows" -arch amd64
其實它所支援的並不止21款,這些只是預設生成的,下面是gox對各種系統的定義,感興趣的同學可以自行了解。
Platforms_1_0 = []Platform{
{"darwin", "386", true},
{"darwin", "amd64", true},
{"linux", "386", true},
{"linux", "amd64", true},
{"linux", "arm", true},
{"freebsd", "386", true},
{"freebsd", "amd64", true},
{"openbsd", "386", true},
{"openbsd", "amd64", true},
{"windows", "386", true},
{"windows", "amd64", true},
}
Platforms_1_1 = append(Platforms_1_0, []Platform{
{"freebsd", "arm", true},
{"netbsd", "386", true},
{"netbsd", "amd64", true},
{"netbsd", "arm", true},
{"plan9", "386", false},
}...)
Platforms_1_3 = append(Platforms_1_1, []Platform{
{"dragonfly", "386", false},
{"dragonfly", "amd64", false},
{"nacl", "amd64", false},
{"nacl", "amd64p32", false},
{"nacl", "arm", false},
{"solaris", "amd64", false},
}...)
Platforms_1_4 = append(Platforms_1_3, []Platform{
{"android", "arm", false},
{"plan9", "amd64", false},
}...)
Platforms_1_5 = append(Platforms_1_4, []Platform{
{"darwin", "arm", false},
{"darwin", "arm64", false},
{"linux", "arm64", false},
{"linux", "ppc64", false},
{"linux", "ppc64le", false},
}...)
Platforms_1_6 = append(Platforms_1_5, []Platform{
{"android", "386", false},
{"linux", "mips64", false},
{"linux", "mips64le", false},
}...)
Platforms_1_7 = append(Platforms_1_5, []Platform{
// While not fully supported s390x is generally useful
{"linux", "s390x", true},
{"plan9", "arm", false},
// Add the 1.6 Platforms, but reflect full support for mips64 and mips64le
{"android", "386", false},
{"linux", "mips64", true},
{"linux", "mips64le", true},
}...)
Platforms_1_8 = append(Platforms_1_7, []Platform{
{"linux", "mips", true},
{"linux", "mipsle", true},
}...)
除了剛才的命令外還有另一種生成方式,用斜槓的方式將系統與架構合併批次生成。
gox -osarch "windows/amd64 linux/amd64"
趕緊把你生成的程式發給小夥伴執行試試吧,以上就是本文全部內容,感謝閱讀。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/1817/viewspace-2823070/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- go 交叉編譯,部署Go編譯
- Go 語言編譯期斷言Go編譯
- C語言編譯工具C語言編譯
- badamczewski/PowerUp:Rust/Go語言的反編譯工具RustGo編譯
- ubuntu下編譯交叉編譯工具鏈Ubuntu編譯
- Go跨平臺交叉編譯Go編譯
- Go - armv7 交叉編譯Go編譯
- go語言編譯過程概述Go編譯
- Go語言內幕(2):深入 Go 編譯器Go編譯
- 製作交叉編譯工具鏈概述編譯
- 交叉編譯工具鏈構建原理編譯
- 交叉編譯編譯
- [譯] Go 語言實戰: 編寫可維護 Go 語言程式碼建議Go
- 全網可用交叉編譯工具鏈大全編譯
- 關於Gdb工具的交叉編譯、移植編譯
- lazarus交叉編譯編譯
- GDB交叉編譯編譯
- golang交叉編譯Golang編譯
- 【譯】Go語言宣告語法Go
- 幽默:Go語言的編譯器 - programmerjoke9Go編譯
- Go 編譯和工具鏈Go編譯
- 交叉編譯入門編譯
- 淺談交叉編譯編譯
- 使用Go語言從零編寫PoS區塊鏈(譯)Go區塊鏈
- [翻譯] Go 語言入門Go
- 交叉編譯和 RPC編譯RPC
- wifidog交叉編譯WiFi編譯
- android NDK 交叉編譯Android編譯
- golang初學:交叉編譯Golang編譯
- Go語言專案編譯之後找不到配置檔案Go編譯
- 源語言、目標語言、翻譯器、編譯器、直譯器編譯
- 編譯型語言與解釋型語言編譯
- Go 語言 udpproxy 除錯工具GoUDP除錯
- Go 語言 WebSocket 除錯工具GoWeb除錯
- Rust 交叉編譯與條件編譯總結Rust編譯
- 交叉編譯-Mac環境使用NDK編譯FFmpeg編譯Mac
- 編譯器的自展和自舉、交叉編譯編譯
- java編譯、編碼、語言設定Java編譯