Contents

GO編譯程式紀錄

最近玩golang最喜歡它編譯可以直接跨平台執行
而且看了一下
真的很簡單,只需要一行go build
但真的是這樣的嗎?
(不然也不會有這一篇了XD)

golang編譯真的很簡單
只需要go build main.go即可以編譯main.go
但是go build是整個目錄都會進行編譯
編譯出來的程式正常本機可以執行

為什麼要框住本機呢

因為這就是我踩雷的地方

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
Mac 下编译 Linux 和 Windows 64位可执行程序
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.go
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main.go

Linux 下编译 Mac 和 Windows 64位可执行程序
CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build main.go
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main.go

Windows 下编译 Mac 和 Linux 64位可执行程序
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

參考來源:Golang 在 Mac、Linux、Windows 下如何交叉编译 - CSDN博客
假如你是在window用git-bash話,前面變數可以加export
當然後面的main.go可以不用填

正常有go get套件編譯會沒有問題

環境變數設定完,可以go env查看GO環境變數設定值

但重點來了

編譯後別台電腦不能執行

奇怪我把程式丟到Linux竟然不能執行 (說好的編譯可以跑的 囧)
但發現執行錯誤訊息
竟然有出現我在Win7路徑
當下沒有留意到是抓不到Package問題
好像有甚麼address關鍵字錯誤
因為同事也有在玩
他說是抓不到套件關係

後來有爬到一個指令
在程式目錄執行

1
go build -a -v

這樣就很神奇可以跑
不過我在win7編譯Linux程式,在Linux還是不能跑
Linux編譯Win7程式,在Win7正常執行
但是在Win10編譯Linux程式,在Linux正持行
反之也可以

不知道Win7編譯GO怎麼了….

其實這篇重點只有go build -v -a
但網路上看到的文章真的不多
不知道為什麼…(有可能我方法不正確)

gitea編譯紀錄

中間有試著gitea編譯

1
make generate all

不知道這一行我不能執行
但輸入make就正常運行
輸入go build -v -a也能跑,(go build好像不能)

參考來源
golang - Go语言的三个命令 go build, go install, go get - SegmentFault 思否
go build - GO 命令教程 - 极客学院Wiki