golang編譯程序
⑴ Go 是怎麼使用 Go 來編譯自身的
至於怎麼編譯自身的:
用其它語言比如c++實現一個[Go語言編譯器-1]
用Go語言寫一個[Go語言編譯器-2]
用這個c++實現的[Go語言編譯器-1]編譯第2步裡面說的Go語言寫的[Go語言編譯器-2]
用第3步得到的[Go語言編譯器-2],再編譯一次第2步裡面說的[Go語言編譯器-2]的源碼。
OK,現在有一個Go語言實現的編譯器了,最開始那個c++寫的編譯器沒用了,可以扔掉不要了。以後就不停的優化使用這個Go語言實現的自身的編譯器就行了。
⑵ golang 跨平台編譯
只需要指定目標操作系統的平台和處理器架構即可:
因為不支持CGO,所以要禁用CGO
然後再執行go build命令,得到的就是能夠在linux平台運行的可執行文件了。
Mac 下編譯 Linux 和 Windows 平台 64位 可執行程序:
Linux下編譯 Mac 和 Windows 平台64位可執行程序:
Windows下編譯Mac平台64位可執行程序:
整個過程看起來非常簡單,運行起來也非常簡單,調用make release命令,並給VERSION變數賦值不同的版本號即可:
命令會編譯出不同平台可運行的壓縮包:
⑶ Mac下交叉編譯linux golang程序
一、背景介紹
閑來無事,申請了台aws伺服器在家搞點小東東,用golang做了個小東東,想放上去。自己的電腦是mac電腦,起初忘記了交叉編譯的事,直接編譯了下直接扔到aws,運行的時候出現了不可以運行的二進制格式提示。
二、交叉編譯的過程
1、隨手網路了下,很多文章都寫的「CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build」(不知你搜索到的是不是這個結果),看到這也挺簡單,分別是禁用cgo,指定目標系統,指定目標CPU體系架構,然後編譯。
按照網路出來的建議,嘗試在電腦上編譯了下,提示如下錯誤,如果沒有出現錯誤的可以不用往下看了哈。
2、如第一步所述,是將CGO關閉的狀態,如果程序用到了CGO,是不是就需要將CGO放開?將CGO放開又會是什麼現象?具體如下:
從上述的錯誤信息可以看出來,環境變數是生效的,確實是linux體系架構了。
3、繼續網路,https://blog.csdn.net/zhaoli081223/article/details/121255583 終於發現這篇文章非常不錯,在這里和大家分享下,按照文章的操作就可以解決問題了,而且裡面有非常詳細的講解。
⑷ 怎麼編譯golang寫的程序為系統服務
設置GOPATH,這個環境變數指向你的projectDir(工程目錄),形如:GOPATH=/home/user/ext:/home/user/projectDir (可以設置多個工程目錄,linux下用冒號分隔,windows下用分號分隔)
創建工程文件夾projectDir
在projectDir下創建src目錄
在src下創建區分包的文件夾myDir
在myDir下創建包pkgDir
在pkgDir下創建package source源代碼文件,這些文件的package都是pkgDir