go語言linux編譯 go linux編譯

golang編譯linux失敗

文件權(quán)限的問題。golang編譯linux失敗多數(shù)是文件權(quán)限的問題導(dǎo)致。golang又稱go語言是一種靜態(tài)強(qiáng)類型、編譯型語言,是一個(gè)開源編程環(huán)境,可以輕松構(gòu)建簡單、可靠和高效的軟件。

創(chuàng)新互聯(lián)建站專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于做網(wǎng)站、網(wǎng)站制作、泰興網(wǎng)絡(luò)推廣、小程序定制開發(fā)、泰興網(wǎng)絡(luò)營銷、泰興企業(yè)策劃、泰興品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);創(chuàng)新互聯(lián)建站為所有大學(xué)生創(chuàng)業(yè)者提供泰興建站搭建服務(wù),24小時(shí)服務(wù)熱線:13518219792,官方網(wǎng)址:www.muchs.cn

如何編譯arm linux的go

Golang也就是Go語言,現(xiàn)在已經(jīng)發(fā)行到1.4.1版本了,語言特性優(yōu)越性和背后Google強(qiáng)大靠山什么的就不多說了。Golang的官方提供了多個(gè)平臺(tái)上的二進(jìn)制安裝包,遺憾的是并非沒有發(fā)布ARM平臺(tái)的二進(jìn)制安裝包。ARM平臺(tái)沒辦法直接從官網(wǎng)下載二進(jìn)制安裝包來安裝,好在Golang是支持多平臺(tái)并且開源的語言,因此可以通過直接在ARM平臺(tái)上編譯源代碼來安裝。整個(gè)過程主要包括編譯工具配置、獲取Golang源代碼、設(shè)置Golang編譯環(huán)境變量、編譯、配置Golang行環(huán)境變量等步驟。

注:本文選用樹莓派做測試,因?yàn)闃漭墒腔贏RM平臺(tái)的。

1、編譯工具配置

據(jù)說下個(gè)版本的golang編譯工具要使用golang自己來寫,但目前還是使用C編譯工具的。因此,首先要配置好C編譯工具:

1.1 在Ubuntu或Debian平臺(tái)上可以使用sudo apt-get install gcc libc6-dev命令安裝,樹莓派的RaspBian系統(tǒng)是基于Debian修改的,所以可以使用這種方法安裝。

1.2 在RedHat或CentOS 6平臺(tái)上可以使用sudo yum install gcc libc-devel命令安裝。

安裝完成后可以輸入 gcc --version命令驗(yàn)證是否成功安裝。

2、獲取golang源代碼

2.1 直接從官網(wǎng)下載源代碼壓縮包。

golang官網(wǎng)提供golang的源代碼壓縮包,可以直接下載,最新的1.4.1版本源代碼鏈接:

2.2 使用git工具獲取。

golang使用git版本管理工具,也可以使用git獲取golang源代碼。推薦使用這個(gè)方法,因?yàn)橐院罂梢噪S時(shí)獲取最新的golang源代碼。

2.2.1 首先確認(rèn)ARM平臺(tái)上已經(jīng)安裝了git工具,可以使用git --version命令確認(rèn)。一般linux平臺(tái)都安裝了git,沒有的話可以自行安裝,不同平臺(tái)的安裝方法可以參考:

2.2.2 克隆遠(yuǎn)程golang的git倉庫到本地

在終端cd到你想要安裝golang的目錄,確保該目錄下沒有名為go的目錄。然后以下命令獲取代碼倉庫:

git clone

大陸地區(qū)可能會(huì)獲取失敗,在不翻墻的情況下我試了幾次都沒成功,原因大家都懂的。好在google已經(jīng)將golang也托管到github上面,所以也可以通過下面命令獲取:

git clone

視網(wǎng)絡(luò)情況,下載可能需要不少時(shí)間。我2M的帶寬花了將近兩個(gè)小時(shí)才下載完,雖然整個(gè)項(xiàng)目不過幾十兆= =

下載完成后,可以看到目錄下多了一個(gè)go目錄,里面即為golang的源代碼,在終端上執(zhí)行cd go命令進(jìn)入該目錄。

執(zhí)行下面命令檢出go1.4.1版本的源代碼,因?yàn)楝F(xiàn)在已經(jīng)有新的代碼提交上去了,最新的代碼可能不是最穩(wěn)定的:

git checkout go1.4.1

至此,最新1.4.1發(fā)行版的源代碼獲取完畢

3、設(shè)置golang的編譯環(huán)境變量

主要有GOROOT、GOOS、GOARCH、GOARM四個(gè)環(huán)境變量需要設(shè)置,先解釋四個(gè)環(huán)境變量的意義。

3.1 GOROOT

主要代表golang樹結(jié)構(gòu)目錄的路徑,也就是上面git檢出的go目錄。一般可以不用設(shè)置這個(gè)環(huán)境變量,因?yàn)榫幾g的時(shí)候默認(rèn)會(huì)以go目錄下src子目錄中的all.bash腳本運(yùn)行時(shí)的父目錄作為GOROOT的值。為了保險(xiǎn)起見,可以直接設(shè)置為go目錄的路徑。

3.2 GOOS和GOARCH

分別代表編譯的目標(biāo)系統(tǒng)和平臺(tái),可選值如下:

GOOS GOARCH

darwin 386

darwin amd64

dragonfly 386

dragonfly amd64

freebsd 386

freebsd amd64

freebsd arm

linux 386

linux amd64

linux arm

netbsd 386

netbsd amd64

netbsd arm

openbsd 386

openbsd amd64

plan9 386

plan9 amd64

solaris amd64

windows 386

windows amd64

需要注意的是這兩個(gè)值代表的是目標(biāo)系統(tǒng)和平臺(tái),而不是編譯源代碼的系統(tǒng)和平臺(tái)。樹莓派的RaspBian是linux系統(tǒng),所以這些GOOS設(shè)置為linux,GOARCH設(shè)置為arm。

3.3 GOARM

表示使用的浮點(diǎn)運(yùn)算協(xié)處理器版本號,只對arm平臺(tái)有用,可選值有5,6,7。如果是在目標(biāo)平臺(tái)上編譯源代碼,這個(gè)值可以不設(shè)置,它會(huì)自動(dòng)判斷需要使用哪一個(gè)版本。

總結(jié)下來,在樹莓派上設(shè)置golang的編譯環(huán)境變量,可編輯$HOME/.bashrc文件,在末尾添加下面內(nèi)容:

export GOROOT=你的go目錄路徑

export GOOS=linux

export GOARCH=arm

編輯完后保存,執(zhí)行source ~/.bashrc命令讓修改生效。

4、編譯源代碼

環(huán)境變量配置完成自后就可以開始編譯源代碼。在go目錄下的src子目錄中,主要有all.bash和make.bash兩個(gè)腳本(另外還有兩個(gè)all.bat和make.bat腳本適用于window平臺(tái))。編譯實(shí)際上就是執(zhí)行其中一個(gè)腳本,兩者的區(qū)別在于all.bash在編譯完成后還會(huì)執(zhí)行一些測試套件。如果希望只編譯不測試,可以運(yùn)行make.bash腳本。使用cd命令進(jìn)入go下src目錄,執(zhí)行./all.bash或者./make.bash命令即可開始編譯。由于硬件情況不同,編譯耗費(fèi)的時(shí)間不同。在我的B型樹莓派編譯過程花費(fèi)了將近半個(gè)小時(shí),編譯完成后執(zhí)行的測試套件又花費(fèi)了差不多一個(gè)小時(shí),總共花費(fèi)了一個(gè)半小時(shí)左右。

5、配置golang運(yùn)行環(huán)境變量

編譯完成后,go目錄下會(huì)生成bin目錄,里面就是go的運(yùn)行腳本。為了以后使用方法,可以將這個(gè)bin路徑添加到PATH環(huán)境變量中。同樣編輯~/.bashrc文件,因?yàn)榍懊嬖O(shè)置過GOROOT環(huán)境變量指向go目錄了,所以只需要在末尾加上

export PATH=$PATH:$GOROOT/bin

保存后同樣執(zhí)行source ~/.bashrc命令讓環(huán)境變量生效。

至此,golang源代碼編譯安裝成功。執(zhí)行g(shù)o version應(yīng)該就能看到當(dāng)前golang的版本信息,表示編譯安裝成功。

linux環(huán)境下golang怎么編譯exe

Linux 是不需要安裝的,直接用 chmod -x 文件名 將它的屬性修改為可運(yùn)行,然后就可以通過命令行執(zhí)行它了,后綴名你改為 .sh ,這是 shell 默認(rèn)支持的文件類型

Go語言編譯器TinyGo,基于LLVM,在微控制器和小系統(tǒng)上編譯和運(yùn)行

TinyGo是一個(gè)為微控制器、WebAssembly(Wasm)和命令行工具等小型場景設(shè)計(jì)的Go語言編譯器。TinyGo重用了Go語言工具和LLVM使用的庫,以編譯用Go語言編寫的程序。目前,該項(xiàng)目在GitHub上已經(jīng)積累了10.1k的Star。

如下為一個(gè)示例程序,當(dāng)運(yùn)行在任何支持的帶板載LED的主板上時(shí),則會(huì)點(diǎn)亮內(nèi)置LED。

上述程序可以在單片機(jī)、Adafruit ItsyBitsy M0微控制器或任何支持的帶內(nèi)置LED的板上進(jìn)行編譯和不需要修改的運(yùn)行,只要設(shè)置正確的TinyGo編譯器目標(biāo)即可。例如,設(shè)置如下目標(biāo)可以編譯和點(diǎn)亮 單片機(jī)。

項(xiàng)目概述

TinyGo項(xiàng)目旨在將Go語言引入到具有單進(jìn)程或核心的微控制器和小系統(tǒng)。TinyGo類似于emgo,但主要的區(qū)別在于作者想要保留Go內(nèi)存模型。另一個(gè)區(qū)別在于TinyGo在內(nèi)部使用LLVM,因而可以獲得更小更高效的代碼以及更高的靈活性。

創(chuàng)建TinyGo項(xiàng)目的初衷是,如果Python可以在微控制器上運(yùn)行,Go語言當(dāng)然也應(yīng)該能夠在更低級微設(shè)備上運(yùn)行。

支持設(shè)備

你可以為微控制器、WebAssembly和Linux編譯TinyGo程序。目前,TinyGo支持以下85種微處理器板。

更多技術(shù)細(xì)節(jié)請參閱原項(xiàng)目。

GO語言如何編譯發(fā)布到Linux

在命令行執(zhí)行如下指令

SET CGO_ENABLED=0

SET GOOS=linux

SET GOARCH=amd64

go build main.go? //開始編譯程序

Mac下交叉編譯linux golang程序

一、背景介紹

閑來無事,申請了臺(tái)aws服務(wù)器在家搞點(diǎn)小東東,用golang做了個(gè)小東東,想放上去。自己的電腦是mac電腦,起初忘記了交叉編譯的事,直接編譯了下直接扔到aws,運(yùn)行的時(shí)候出現(xiàn)了不可以運(yùn)行的二進(jìn)制格式提示。

二、交叉編譯的過程

?1、隨手百度了下,很多文章都寫的“CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build”(不知你搜索到的是不是這個(gè)結(jié)果),看到這也挺簡單,分別是禁用cgo,指定目標(biāo)系統(tǒng),指定目標(biāo)CPU體系架構(gòu),然后編譯。

按照百度出來的建議,嘗試在電腦上編譯了下,提示如下錯(cuò)誤,如果沒有出現(xiàn)錯(cuò)誤的可以不用往下看了哈。

2、如第一步所述,是將CGO關(guān)閉的狀態(tài),如果程序用到了CGO,是不是就需要將CGO放開?將CGO放開又會(huì)是什么現(xiàn)象?具體如下:

從上述的錯(cuò)誤信息可以看出來,環(huán)境變量是生效的,確實(shí)是linux體系架構(gòu)了。

3、繼續(xù)百度, 終于發(fā)現(xiàn)這篇文章非常不錯(cuò),在這里和大家分享下,按照文章的操作就可以解決問題了,而且里面有非常詳細(xì)的講解。

分享文章:go語言linux編譯 go linux編譯
URL標(biāo)題:http://www.muchs.cn/article20/hphhco.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站、營銷型網(wǎng)站建設(shè)、全網(wǎng)營銷推廣微信公眾號、搜索引擎優(yōu)化、網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)