(1). GO嵌入式開發之 --- 交叉編譯

簡介

? ? ? ? golang也就是go語言,語言特性優越性和背后google強大靠山什么的就不多說了。golang的官方提供了多個平臺上的二進制安裝包,遺憾的是并非沒有發布ARM平臺的二進制安裝包。ARM平臺沒辦法直接從官網下載二進制安裝包來安裝,好在golang是支持多平臺并且開源的語言,因此可以通過直接在ARM平臺上編譯源代碼來安裝。整個過程主要包括編譯工具配置、獲取golang源代碼、設置golang編譯環境變量、編譯、配置golang運行環境變量等步驟。

開發環境介紹

  • 主機操作系統:Ubuntu14.04 64位
  • 目標平臺:A40I (ARM Cortex-A7)
  • 交叉工具鏈:arm-linux-gnueabi,gcc5.3.1
  • 構建版本:vgo1.4/v1.13.4
  • 編譯時間:2019.11.18
  • 下載地址:https://studygolang.com/dl

編譯Go編譯器(Host)

? ? ? ? 自go1.4版本之后的go版本編譯器都是go寫的,用go自己編譯自己的,go1.4是最后一個用gcc來編譯的版本

Step1. 下載

下載地址:https://dl.google.com/go/go1.4-bootstrap-20171003.tar.gz

Step2. 解壓
tar -zxvf go1.4-bootstrap-20171003.tar.gz
mv go go1.4
cd go1.4/src
Step3. 編譯安裝
GOOS=linux GOARCH=amd64 ./make.bash

編譯之后將會在go1.4/bin目錄下生成go命令二進制文件

Step4. 配置編譯器

export GOROOT_BOOTSTRAP=/work/platform/a40i/01lib/go1.4

編譯Go(ARM)

上面完成Go1.4的編譯之后,可以利用Go1.4來編譯新版本的Go

Step1. 下載

下載地址:[https://studygolang.com/dl)。go1.13.4.src.tar.gz

Step2. 解壓
tar -zxvf go1.13.4.src.tar.gz
mv go go1.13.4
cd go1.13.4/src 
Step3. 配置
source ./env-cfg.sh
export CC_FOR_TARGET=arm-linux-gnueabi-gcc
export CXX_FOR_TARGET=arm-linux-gnueabi-g++

其中,

  • source ./env-cfg.sh: 配置編譯器。
  • CC_FOR_TARGET/CXX_FOR_TARGET:為了使編譯出來的最新的go支持arm,支持cgo;這兩個配置項也必須要配置。
Step4. 編譯
CGO_ENABLED=1 GOOS=linux GOARCH=arm GOARM=7 ./make.bash
  • CGO_ENABLED=1: 開啟CGO編譯;最好開啟CGO_ENABLED,因為嵌入式涉及和C的相互調用。我這里也選擇了開啟。
    當選擇開啟CGO編譯時必須配置CC_FOR_TARGET和CXX_FOR_TARGET兩個環境變量。

APP 測試驗證

Step1. 環境變量設置
export CC_FOR_TARGET=arm-linux-gnueabi-gcc
export CXX_FOR_TARGET=arm-linux-gnueabi-g++
export GOROOT=/work/platform/a40i/01lib/go1.13.4
export GOBIN=$GOROOT/bin
export GOPATH=/home/gopath
export PATH=$PATH:$GOBIN:GOPATH/bin

驗證下go版本:

?  go go version
go version go1.13.4 linux/amd64
Step2. 測試hello world

vim test.go

package main

import "fmt"

func main() {
    fmt.Println("Hello world")
}
代碼運行測試:
?   go run test.go
Hello world
PC編譯測試:
?   go build test.go 
?   ./test 
Hello world

ARM編譯測試:
GOOS=linux GOARCH=arm GOARM=7 go build test.go

將編譯好的test二進制文件放到開發板上驗證;



參考鏈接:

  1. https://blog.csdn.net/yyz_1987/article/details/86611750
  2. https://studygolang.com/articles/15054?fr=sidebar
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,333評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,491評論 3 416
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,263評論 0 374
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,946評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,708評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,186評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,255評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,409評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,939評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,774評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,976評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,518評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,209評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,641評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,872評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,650評論 3 391
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,958評論 2 373

推薦閱讀更多精彩內容

  • 課程目標 Window系統下的環境搭建,go的環境配置,MinGW的環境配置 Linux系統下的環境搭建,go的環...
    qiurank閱讀 2,125評論 0 1
  • 歡迎掃碼關注公眾號flysnow_org,第一時間看后續文章。覺得有幫助的話,順手分享到朋友圈吧,感謝支持。 前段...
    飛雪無情flysnow_org閱讀 33,212評論 4 45
  • 申金鑫 17101223365 轉載自公眾號flysnow_org 【嵌牛導讀】:本文介紹了各種系統下的Go語言環...
    Felixxin閱讀 3,395評論 0 20
  • Go是一門全新的靜態類型開發語言,具有自動垃圾回收,豐富的內置類型,函數多返回值,錯誤處理,匿名函數,并發編程,反...
    liuzx32閱讀 2,687評論 0 2
  • 腦海里一直一直盤旋著四個字“索然無味”,因為感冒,味覺失效,吃什么都索然無味難以下咽;一篇文章看來看去,對作者的寫...
    荷塘花開閱讀 688評論 0 2