go語言交叉編譯


問題

golang如何在一個平台編譯另外一個平台可以執行的文件。比如在mac上編譯Windows和linux可以執行的文件。那么我們的問題就設定成:如何在mac上編譯64位linux的可執行文件。

解決方案

golang的交叉編譯要保證golang版本在1.5以上,本解決方案實例代碼1.9版本執行的。 我們想要編譯的文件hello.go hello.go

package main

import "fmt"

func main() {
    fmt.Printf("hello, world\n")
}

在mac上編譯64位linux的命令編譯命令 bash:

GOOS=linux GOARCH=amd64 go build hello.go

上面這段代碼直接在命令控制台里面運行就可以生成64位linux的可執行程序。 參數解析 這里用到了兩個變量:

GOOS:目標操作系統 GOARCH:目標操作系統的架構

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

編譯其他平台的時候根據上面表格參數執行編譯就可以了。 擴展閱讀 在網絡上的諸多教程中可能會看到下面的編譯命令

CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build hello.go

其中CGO_ENABLED=0的意思是使用C語言版本的GO編譯器,參數配置為0的時候就關閉C語言版本的編譯器了。自從golang1.5以后go就使用go語言編譯器進行編譯了。在golang1.9當中沒有使用CGO_ENABLED參數發現依然可以正常編譯。當然使用了也可以正常編譯。比如把CGO_ENABLED參數設置成1,即在編譯的過程當中使用CGO編譯器,我發現依然是可以正常編譯的。 實際上如果在go當中使用了C的庫,比如import “C”默認使用go build的時候就會啟動CGO編譯器,當然我們可以使用CGO_ENABLED=0來控制go build是否使用CGO編譯器。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM