Golang 的跨平台交叉编译浅析
2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
什么是跨平臺交叉編譯
交叉編譯
通俗地講就是在一種平臺上編譯出其他幾個平臺能夠運(yùn)行的程序(通常指系統(tǒng)和CPU架構(gòu)的不同)
交叉編譯通常使用在分發(fā)時,編譯出多個平臺可用的二進(jìn)制程序,比如在Linux下編譯出可以在Win下可以使用的EXE程序。
本地編譯
本地編譯是指當(dāng)前系統(tǒng)所配置編譯器根據(jù)當(dāng)前系統(tǒng)配置編譯出在當(dāng)前系統(tǒng)所適用的執(zhí)行程序(部分其他語言本地編譯時可能會由于擴(kuò)展包含的問題,無法在同平臺其他機(jī)器運(yùn)行)。
所以如果要生成在非本機(jī)的其他平臺和系統(tǒng)的程序,就需要用到交叉編譯(交叉編譯工具鏈)。
交叉編譯工具鏈
交叉編譯工具鏈?zhǔn)且粋€由編譯器、連接器和解釋器組成的綜合開發(fā)環(huán)境,交叉編譯工具鏈主要由binutils、gcc和glibc 3個部分組成。
有時出于減小 libc 庫大小的考慮,也可以用別的 c 庫來代替 glibc,例如 uClibc、dietlibc 和 newlib。
Golang 的跨平臺交叉編譯
Go語言是編譯型語言,可以將程序編譯后在將其拿到其它操作系統(tǒng)中運(yùn)行,此過程只需要在編譯時增加對其它系統(tǒng)的支持。
交叉編譯依賴下面幾個環(huán)境變量
- GOARCH 目標(biāo)平臺(編譯后的目標(biāo)平臺)的處理器架構(gòu)(386、amd64、arm)
- GOOS 目標(biāo)平臺(編譯后的目標(biāo)平臺)的操作系統(tǒng)(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交叉編譯步驟(可跳過)
首先進(jìn)入$GOROOT/go/src 源碼所在目錄,執(zhí)行如下命令創(chuàng)建目標(biāo)平臺所需的包和工具文件
# 如果你想在Windows 32位系統(tǒng)下運(yùn)行 cd $GOROOT/src CGO_ENABLED=0 GOOS=windows GOARCH=386 ./make.bash # 如果你想在Windows 64位系統(tǒng)下運(yùn)行 cd $GOROOT/src CGO_ENABLED=0 GOOS=windows GOARCH=amd64 ./make.bash# 如果你想在Linux 32位系統(tǒng)下運(yùn)行 cd $GOROOT/src CGO_ENABLED=0 GOOS=linux GOARCH=386 ./make.bash # 如果你想在Linux 64位系統(tǒng)下運(yùn)行 cd $GOROOT/src CGO_ENABLED=0 GOOS=linux GOARCH=amd64 ./make.bash交叉編譯當(dāng)前項目
# 如果你想在Windows 32位系統(tǒng)下運(yùn)行 CGO_ENABLED=0 GOOS=windows GOARCH=386 go build test.go # 如果你想在Windows 64位系統(tǒng)下運(yùn)行 CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build test.go# 如果你想在Linux 32位系統(tǒng)下運(yùn)行 CGO_ENABLED=0 GOOS=linux GOARCH=386 go build test.go # 如果你想在Linux 64位系統(tǒng)下運(yùn)行 CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build test.go上面命令中的 CGO_ENABLED = 0 表示設(shè)置CGO工具不可用; GOOS 表示程序構(gòu)建環(huán)境的目標(biāo)操作系統(tǒng)(Linux、Windows); GOARCH 表示程序構(gòu)建環(huán)境的目標(biāo)計算架構(gòu)(32位、64位);
現(xiàn)在你可以在相關(guān)目標(biāo)操作系統(tǒng)上運(yùn)行編譯后的程序了。
鏈接
關(guān)于于 Go 的跨平臺交叉編譯淺析 交叉編譯
轉(zhuǎn)載于:https://my.oschina.net/dingdayu/blog/1583815
總結(jié)
以上是生活随笔為你收集整理的Golang 的跨平台交叉编译浅析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Jenkins与网站代码上线解决方案
- 下一篇: 读取速度贼快的省市区地址库