Golang如何交叉編譯各個平台的二進位制檔案詳解

2022-09-24 18:15:13 字數 2052 閱讀 4858

golang交叉編譯平台的二進位制檔案

熟悉golang的人都知道,golang交叉編譯很簡單的,只要設定幾個環境變數就可以了

# mac上編譯linux和windows二進位制

cgo_enabled=0 goos=linux goarch=amd64 go build

cgo_enabled=0 goos=windo程式設計客棧ws goarch=amd64 go build

# linux上編譯mac和windows二進位制

cgo_enabled=0 goos=darwin goarch=amd64 go build

cgo_enabled=0 goos=windows goarch=amd64 go build

# windows上編譯mac和linux二進位制

set cgo_enabled=0 set goos=darwin set goarch=amd64 go build main.go

set cgo_enabled=0 set goos=linux set goarch=amd64 go build main.go

goos和goarch的值有哪些,可以網上搜,很多的

但是交叉編譯是不支援cgo的,也就是說如果你的**中存在c**,是編譯不了的,比如說你的程式中使用了sqlite資料庫,在編譯go-sqlite驅動時按照上面的做法是編譯不通過的

需要cgo支援的,要將cgo_enabled的0改為1,也就是cgo_enabled=1,此外還需要設定編譯器,例如我想在linux上編譯arm版的二進位制,需要這樣做:

# build for arm

cgo_enabled=1 goos=linux goarch=arm cc=arm-linux-gnueabi-gcc go build

這個arm-linux-gnueabi-gcc是個啥東西,怎麼安裝,如果你系統是ubuntu的話,可以按照下面命令安裝:

sudo apt-get install g++-arm-linux-gnueabi

sudo apt-get install gcc-arm-linux-gnueabi

安裝成功程式設計客棧後就可以編譯了,但是如果你想編譯mac版呢,或者想在mac上編譯linux版,window版咋辦,乙個乙個安裝效率太慢,系統命令可以安裝還好,系統命令不支援,那就得自己去搜,然後找到位址,**,安裝,費時又費力

github上有這個工具:

它是乙個docker映象,裡面整合了各種平台的編譯器,按照它的教程,很輕鬆的可以編譯出各個平台的二進位制檔案,安裝的時候比較耗時,需要**大概1個g的資料,但是效果可是槓槓的

預設是編譯所有平台的二進位制的,會有些耗時,如果只需要某個特定平台的二進位制,可以使用-targets引數

注意:是-targets而不是--targets,我自己測試的時候--targets是會失敗的

附:golang如何讓程式設計客棧編譯生產的二進位制檔案變小

把go程式變小的辦法是:

hfxbugkjgo build -ldflags "-s -w" (go install類似)

-s去掉符號表(然後panic時候的stack trace就沒有任何檔名/行號資訊了,

這個等價於普通c/c++程式被strip的效果),

-w去掉dwarf除錯資訊,得到的程式就不能用gdb除錯了。

比如,server.go是乙個簡單的http server,用了net/http包。

$ go build server.go

$ ls -l server

-rwxr-xr-x 1 minux staff 4507004 2012-10-25 14:16 server

$ go build -ldflags "-s -w" server.go

$ ls -l server

-rwxr-xr-x 1 minux staff 2839932 2012-10-25 www.cppcns.com14:16 server

-s和-w也可以分開使用,一般來說如果不打算用gdb除錯,-w基本沒啥損失。

-s的損失就有點大了。

總結本文標題: golang如何交叉編譯各個平台的二進位制檔案詳解

本文位址:

golang交叉編譯

golang交叉編譯 golang 支援交叉編譯,在乙個平台上生成另乙個平台的可執行程式 mac 下編譯 linux 和 windows 64位可執行程式 cgo enabled 0 goos linux goarch amd64 go build main.go cgo enabled 0 goo...

golang交叉編譯

go env檢查各項環境變數無誤 進入shell環境 windows為cmd環境 切換到專案工程的原始碼目錄 包含main包的那個目錄 設定好環境變數,關閉cgo 交叉編譯不支援所以要關閉 將編譯目標平台的環境變數設定好,然後執行go build命令即可,具體方法如下 cgo enabled 0 g...

golang交叉編譯

golang是乙個跨平台的語言,如何進行跨平台編譯呢,實際上只需要制定以下兩個 引數即可 goos 可執行檔案將要執行的作業系統。支援 darwin,freebsd,linux,windows.goarch 作業系統架構。支援 386,amd64,arm.編譯mac cgo enabled 0,go...