Golang 的跨平台交叉编译浅析
2019獨角獸企業重金招聘Python工程師標準>>>
什么是跨平臺交叉編譯
交叉編譯
通俗地講就是在一種平臺上編譯出其他幾個平臺能夠運行的程序(通常指系統和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支持情況
| 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/src CGO_ENABLED=0 GOOS=windows GOARCH=386 ./make.bash # 如果你想在Windows 64位系統下運行 cd $GOROOT/src CGO_ENABLED=0 GOOS=windows GOARCH=amd64 ./make.bash# 如果你想在Linux 32位系統下運行 cd $GOROOT/src CGO_ENABLED=0 GOOS=linux GOARCH=386 ./make.bash # 如果你想在Linux 64位系統下運行 cd $GOROOT/src CGO_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 的跨平臺交叉編譯淺析 交叉編譯
轉載于:https://my.oschina.net/dingdayu/blog/1583815
總結
以上是生活随笔為你收集整理的Golang 的跨平台交叉编译浅析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Jenkins与网站代码上线解决方案
- 下一篇: 读取速度贼快的省市区地址库