go編譯arm
『壹』 Go語言的功能
Google對Go寄予厚望。其設計是讓軟體充分發揮多核心處理器同步多工的優點,並可解決面向對象程序設計的麻煩。它具有現代的程序語言特色,如垃圾回收,幫助程序設計師處理瑣碎但重要的內存管理問題。Go的速度也非常快,幾乎和C或C++程序一樣快,且能夠快速製作程序。
Go的網站就是用Go所建立,但Google有更大的野心。該軟體是專為構建伺服器軟體所設計(如Google的Gmail)。Google認為Go還可應用到其他領域,包括在瀏覽器內執行軟體,取代javaScript的角色。
Pike說:它至少在強度上比JavaScript高一級。Google自建Chrome瀏覽器,部分原因就是加速JavaScript和網頁表現,而Google已經融合了本身的技術,如Native Client和Gears。
Pike表示,Go另一項與網路相關的特色,是伺服器和用戶端設備,如PC或手機,可以分擔工作。因此,使用Go的服務便可輕松適應不同的用戶端處理性能。
Go也可解決現今的一大挑戰:多核心處理器。一般電腦程序通常依序執行,一次進行一項工作,但多核心處理器更適合並行處理許多工作。Pike說:我們自認有足夠的支持,可改善這方面的問題。
Go團隊正在尋求幫助。其中一個重要領域是改善Go能夠使用的runtime library。這類library可提供許多工具和功能,加快程序設計的過程。而Go的library還包括許多重要的設計元素,並供應處理同作、垃圾收集和其他低層雜務的資源。
Go團隊也需要編譯器方面的協助。Thompson曾為32位元和64位元x86處理器,及ARM處理器寫過一些編譯器,Taylor也為GCC編譯器寫過一個Go前端。
盡管Google對Go有很大的野心,該公司也明白,這項計劃無法完全取代現有的技術。Pike說:我不認為我們能取代任何東西。我們只是創造出這個領域的另一個角色。
『貳』 如何Golang開發Android應用
環境配置好復雜,我不得不嘮叨幾句。
需要下載golang1.4rc版,下載ndk,然後編譯。 然後用go get 下載gobind這個工具, 然後,將寫好的代碼用gobind轉化下,然後使用特殊的編譯命令,將代碼編譯成.so文件,將生成的相關文件,放到android studio的項目中。然後java代碼中,利用jni調用引用的代碼。
... 好,接著往下看吧。
環境准備
一台linux 64的機器
一個帶有AndroidStudioIDE的開發機器
因為環境配置實在復雜,所以我們引入的docker。
docker pull codeskyblue/docker-goandroid
docker run --rm -ti codeskyblue/docker-goandroid bash
cd example; echo "view example projects
docker起來之後,什麼就都配置好了,NDK啦,java啦,GO的環境變數了,等等,並且還預裝了vim,gradle,tmux,git,syncthing,svn
開始寫代碼
寫代碼之前,先約定下目錄結構
go的代碼都放在src/golib下,編譯使用make.bash編譯腳本,看下這個文件樹
.
|-- app.iml
|-- build.gradle
|-- libs/armeabi-v7a # go編譯生成的so文件
| `-- libgojni.so
|-- main.go_tmpl # 一個模板文件,先不用管它
|-- make.bash # 編譯腳本,用來生成.so和Java代碼
`-- src
|-- golib
| |-- hi
| | |-- go_hi�0�2�0�2�0�2 # 自動生成的代碼
| | | `-- go_hi.go
| | `-- hi.go # 需要編寫的代碼
| `-- main.go
`-- main
|-- AndroidManifest.xml
|-- java
| |-- go # 自動生成的代碼
| | |-- Go.java
| | |-- Seq.java
| | `-- hi
| | `-- Hi.java
| `-- me/shengxiang/gohello # 主要的邏輯代碼
| `-- MainActivity.java
`-- res
我已經寫了一個例子,先直接搞下來
編譯下,試試行不行(就算不行問題應該也不大,因為大問題都被我消滅了)
cd GoHello/app
./make.bash
../gradlew build
一切順利的話在build/outputs/apk下應該可以看到app-debug.apk這個文件。(劇透下,這個文件只有800多K)
編譯好的我放到qiniu上了,可以點擊下載看看
下面可以嘗試改改,我拋磚引玉說下
打開hi.go這個文件
hi.go的內容,比較簡單,我們寫Go代碼主要就是這部分
// Package hi provides a function for saying hello.
package hi
import "fmt"
func Hello(name string) {
fmt.Printf("Hello, %s!\n", name)
return "(Go)World"
}
文件末尾添加下面這行代碼
func Welcome(name string) string {
return fmt.Sprintf("Welcome %s to the go world", name)
}
使用./make.bash重新編譯下
打開MainActivity.java 修改下OnClickListener事件
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String message = Hi.Welcome("yourname");
Toast.makeText(MainActivity.this, message, Toast.LENGTH_LONG).show();
}
});
編譯運行下,把生成的apk安裝到手機上試試。
原理解讀(有興趣的接著看)
首先說下gobind這個工具。
go_hi/go_hi.go這個文件時通過gobind這個工具生成的,用來配合一個簡單的程序,生成.so文件
// go_hi.go
package go_hi
import (
"golang.org/x/mobile/bind/seq"
"example/hi"
)
func proxy_Hello(out, in *seq.Buffer) {
param_name := in.ReadUTF16()
hi.Hello(param_name)
}
func init() {
seq.Register("hi", 1, proxy_Hello)
}
這個簡單的程序內容是這樣的
// main.go
package main
import (
"golang.org/x/mobile/app"
_ "golang.org/x/mobile/bind/java"
_ "example/hi/go_hi"
)
func main() {
app.Run(app.Callbacks{})
}
src/MyActivity.java文件內容是這樣的
import ...
import go.Go; // 引入Go這個包
import go.hi.Hi; // gobind生成的代碼
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Go.init(getApplicationContext()); // 初始化兩個線程
Hi.Hello("world");
}
}
其中有一句Go.init(...)這里再看go.Go這個包是什麼樣子的
public final class Go {
// init loads libgojni.so and starts the runtime.
public static void init(Context context) {
... 判斷該函數是否該執行的代碼 -- 省略 --
System.loadLibrary("gojni"); // gojni需要這句
new Thread("GoMain") {
public void run() {
Go.run(); // run()是一個native方法
}
}.start();
Go.waitForRun(); // 這個也是一個native方法
// 這部分可以理解為,啟動了一個後台線程不斷的接收結果到緩存中。
new Thread("GoReceive") {
public void run() { Seq.receive(); }
}.start();
}
private static boolean running = false;
private static native void run();
private static native void waitForRun();
}
MyActivity.java中還有段代碼是 Hi.Hello("world");,打開Hi.java路徑在src/go/hi/Hi.java,這個文件也是gobind生成的,是用來給java方便的調用.so文件
// Hi.java
// File is generated by gobind. Do not edit.
package go.hi;
import go.Seq;
public abstract class Hi {
private Hi() {} // uninstantiable
public static void Hello(String name) {
go.Seq _in = new go.Seq();
go.Seq _out = new go.Seq();
_in.writeUTF16(name);
Seq.send(DESCRIPTOR, CALL_Hello, _in, _out); // 下面接著說
}
private static final int CALL_Hello = 1;
private static final String DESCRIPTOR = "hi";
}
Seq.send這部分實際上最終調用的是一段go代碼
func Send(descriptor string, code int, req *C.uint8_t, reqlen C.size_t, res **C.uint8_t, reslen *C.size_t) {
fn := seq.Registry[descriptor][code]
in := new(seq.Buffer)
if reqlen > 0 {
in.Data = (*[maxSliceLen]byte)(unsafe.Pointer(req))[:reqlen]
}
out := new(seq.Buffer)
fn(out, in)
seqToBuf(res, reslen, out)
}
轉載僅供參考,版權屬於原作者。祝你愉快,滿意請採納哦
『叄』 我在進行實習,單位給了一個題目是將goahead移植到一個arm板子里。我在linux下輸入make clean 沒有錯誤,
arm-elf-gcc-c: not found
意思是沒有找到交叉編譯器arm-elf-gcc,你有沒有這個交叉編譯器呀?
或者你的環境變數沒有設置,要在環境變數裡面加入你的交叉編譯器路徑,才能找到。
設置環境變數好像是
1. 查看/etc/profile文件
2. 查看 .bashrc文件。
然後export PATH=你的環境變數:$PATH;
具體修改環境變數的方法你自己可以網路。
僅供參考。。。
!!!!哦,等一下,你這個arm-elf-gcc-c中間為什麼沒有空格!應該是arm-elf-gcc -c吧。。
『肆』 ARM單片機的頭文件如何用結構體定義地
下面我們以ARM Cortex-M0內核單片機LPC1114的頭文件lpc11xx.h文件進行說明。
1.先說兩句
lpc11xx.h文件是lpc11xx系列單片機包含的頭文件。這個文件的作用和51單片機中的reg51.h頭文件是一個性質,都是用來定義寄存器在單片機中的地址的。
你現在就可以打開reg51.h文件和lpc11xx.h文件看看,對比後你會發現兩個主要的區別,首先是lpc11xx.h文件的寄存器定義是用結構體的形式,而reg51.h文件中,寄存器的定義都是一條一條的很直接的地址定義。然後是reg51.h文件中有sfr這樣的「偽c語言」,而lpc11xx.h中用的是標準的c語言。C語言的最大用武之地就是單片機,要想學c,就在單片機上學,要想學單片機,就先入門c語言。兩者相輔相成的學,效果最好。學以致用,才是學習的最終目標。
2.lpc11xx.h文件中如何定義寄存器地址?
在文件中,定義寄存器地址用到了一下幾方面的c語言基礎知識:
結構體;
結構體指針;
宏定義#define
關鍵字typedef
關鍵字volatile
關鍵字const
lpc11xx.h文件中,把每個模塊都定義了一個結構體,這些模塊有SYSCON、IOCON、UART、GPIO、SSP、I2C、WDT、ADC等。
例如,下面是ADC模塊的結構體定義:
typedef struct
{
__IO uint32_t CR;
__IO uint32_t GDR;
uint32_t RESERVED0;
__IO uint32_t INTEN;
__IO uint32_t DR[8];
__I uint32_t STAT;
} LPC_ADC_TypeDef;
結構體的定義有三種形式,我們這里使用的是「直接說明變數」的形式。
lpc11xx.h文件的第566~584行,給每個模塊的結構體變數定義了結構體指針,並加了宏定義#define,為的是以後寫程序時書寫方便。
把滑鼠放到uint32_t上面,單擊滑鼠右鍵,在彈出的菜單中選擇「Go To Definition Of 『uint32_t』」,如下圖所示:
選擇後,就會跳到它的定義之處,如下圖所示:
typedef是類型重定義關鍵字,所以實際上,CR寄存器的定義是這樣的:
__IO unsigned int CR;
按照同樣的方法,可以找到__IO的定義為:
所以,CR寄存器定義實際上是:
volatile unsigned int CR;
volatile關鍵字的作用是為了讓編譯器不要優化這個變數。
unsigned int關鍵字,用來定義無符號的整形變數。
這時候,有人會問,為什麼不直接寫成這樣呢?答:為了閱讀方便。
__IO uint32_t CR;
看到這條語句,我們就會知道,CR寄存器是一個「32位的可讀可寫寄存器」。
volatile unsigned int CR;
同樣的這句話,我們對它的了解就不是那麼一目瞭然了。
3.如何查看每個寄存器的地址?
上面講到,寄存器的地址是由結構體和結構體指針定義的。現在我們來驗證一下它的正確性。
我們隨便找個寄存器,比如ADC模塊的INTEN寄存器(ADC中斷允許寄存器),打開LPC1114的用戶手冊,找到第25章ADC模塊部分,如下圖所示:
從上面圖中,可以看到INTEN的寄存器的地址是0x4001C00C,接下來,我們打開lpc11xx.c文件來驗證一下吧。
打開lpc11xx.c文件,找到ADC模塊的結構體,如下圖所示:
然後再找到LPC_ADC_TypeDef的結構體指針,如下所示:
結構體指針就是用來指向一個地址的,我們來看看上面語句中的LPC_ADC_BASE是什麼:
再看看上條語句中的LPC_APB0_BASE是什麼:
現在終於挖到底了,原來LPC_ADC_TypeDef指針指向的地址為:
0x40000000+0x1C000=0x4001C000
c語言基礎知識:結構體的第一個變數的地址=結構體指針的地址。
所以結構體的第一個變數地址就是0x4001C000,INTEN前面有3個4位元組的變數,所以INTEN的地址就是0x4001C00C。
驗證完畢。
4.程序中,如何操作寄存器?
C語言基礎知識:用結構體變數指針訪問結構體中的變數,形式有兩種:
*結構體指針變數.變數名
結構體指針變數->變數名
還是拿INTEN寄存器為例,假設我們要給這個寄存器寫0x837,可以這樣寫:
*LPC_ADC.INTEN=0x837;
LPC_ADC->INTEN=0X837;
以上兩種形式,在寫程序的時候,都可以用。人們習慣用第二種形式。
『伍』 go語言中怎麼定義一個string數組
下邊是slice的申明和使用其實這就是一種動態的數組復制代碼 代碼如下:package main
import "fmt"func main() {d := []int{1, 2, 3} //申明一個slice這個是動態的數組,沒有長fmt.Println(d)
var q, w []intq = d[0:1] //可以定取得上邊的長度w = d[1:3]d = append(d, 2) //向其中添加元素fmt.Println(d)fmt.Printlnw。
『陸』 Go語言怎麼樣
Go語言是谷歌推出的一種全新的編程語言,可以在不損失應用程序性能的情況下降低代碼的復雜性。谷歌首席軟體工程師羅布派克(Rob Pike)說:我們之所以開發Go,是因為過去10多年間軟體開發的難度令人沮喪。
Go是谷歌2009發布的第二款編程語言。2009年7月份,谷歌曾發布了Simple語言,它是用來開發Android應用的一種BASIC語言.
Go Logo
北京時間2010年1月10日,Go語言摘得了TIOBE公布的2009年年度大獎。該獎項授予在2009年市場份額增長最多的編程語言。
谷歌資深軟體工程師羅布·派克(Rob Pike)表示,"Go讓我體驗到了從未有過的開發效率。"派克表示,和今天的C++或C一樣,Go是一種系統語言。他解釋道,"使用它可以進行快速開發,同時它還是一個真正的編譯語言,我們之所以現在將其開源,原因是我們認為它已經非常有用和強大。"
2007年,谷歌把Go作為一個20%項目開始研發,即讓員工抽出本職工作之外時間的20%, 投入在該項目上。除了派克外,該項目的成員還有其他谷歌工程師也參與研發。
派克表示,編譯後Go代碼的運行速度與C語言非常接近,而且編譯速度非常快,就像在使用一個互動式語言。現有編程語言均未專門對多核處理器進行優化。Go就是谷歌工程師為這類程序編寫的一種語言。它不是針對編程初學者設計的,但學習使用它也不是非常困難。Go支持面向對象,而且具有真正的閉包(closures)和反射 (reflection)等功能。
在學習曲線方面,派克認為Go與Java類似,對於Java開發者來說,應該能夠輕松學會 Go。之所以將Go作為一個開源項目發布,目的是讓開源社區有機會創建更好的工具來使用該語言,例如 Eclipse IDE中的插件。
在谷歌公開發布的所有網路應用中,均沒有使用Go,但是谷歌已經使用該語言開發了幾個內部項目。派克表示,Go是否會對谷歌即將推出的Chrome OS產生影響,還言之尚早,不過Go的確可以和Native Client配合使用。他表示"Go可以讓應用完美的運行在瀏覽器內。"例如,使用Go可以更高效的實現Wave,無論是在前端還是後台。
Go 同時具有兩種編譯器,一種是建立在GCC基礎上的Gccgo,另外一種是分別針對64位x64和32位x86計算機的一套編譯器(6g和8g)。谷歌目前正在研發其對ARM晶元和Android設備的支持。派克表示,"Android手機存在的問題是,我們一直沒有一個數學協處理器。"
『柒』 GO語言是什麼語言我們應該怎麼學
Go語言是谷歌推出的一種全新的編程語言,可以在不損失應用程序性能的情況下降低代碼的復雜性。谷歌首席軟體工程師羅布派克(Rob Pike)說:我們之所以開發Go,是因為過去10多年間軟體開發的難度令人沮喪。
Go是谷歌2009發布的第二款編程語言。2009年7月份,谷歌曾發布了Simple語言,它是用來開發Android應用的一種BASIC語言.
北京時間2010年1月10日,Go語言摘得了TIOBE公布的2009年年度大獎。該獎項授予在2009年市場份額增長最多的編程語言。
谷歌資深軟體工程師羅布·派克(Rob Pike)表示,"Go讓我體驗到了從未有過的開發效率。"派克表示,今天的C++或C一樣,Go是一種系統語言。他解釋道,"使用它可以進行快速開發,同時它還是一個真正的編譯語言,我們之所以現在將其開源,原因是我們認為它已經非常有用和強大。"
2007年,谷歌把Go作為一個20%項目開始研發,即讓員工抽出本職工作之外時間的20%, 投入在該項目上。除了派克外,該項目的成員還有其他谷歌工程師也參與研發。
派克表示,編譯後Go代碼的運行速度與C語言非常接近,而且編譯速度非常快,就像在使用一個互動式語言。現有編程語言均未專門對多核處理器進行優化。Go就是谷歌工程師為這類程序編寫的一種語言。它不是針對編程初學者設計的,但學習使用它也不是非常困難。Go支持面向對象,而且具有真正的閉包(closures)和反射 (reflection)等功能。
在學習曲線方面,派克認為Go與Java類似,對於Java開發者來說,應該能夠輕松學會 Go。之所以將Go作為一個開源項目發布,目的是讓開源社區有機會創建更好的工具來使用該語言,例如 Eclipse IDE中的插件。
在谷歌公開發布的所有網路應用中,均沒有使用Go,但是谷歌已經使用該語言開發了幾個內部項目。派克表示,Go是否會對谷歌即將推出的Chrome OS產生影響,還言之尚早,不過Go的確可以和Native Client配合使用。他表示"Go可以讓應用完美的運行在瀏覽器內。"例如,使用Go可以更高效的實現Wave,無論是在前端還是後台。
Go 同時具有兩種編譯器,一種是建立在GCC基礎上的Gccgo,另外一種是分別針對64位x64和32位x86計算機的一套編譯器(6g和8g)。谷歌目前正在研發其對ARM晶元和Android設備的支持。派克表示,"Android手機存在的問題是,我們一直沒有一個數學協處理器。"
『捌』 ARM初學者菜鳥的迷惑
ARM的程序空間和數據空間是統一編地址的,和51單片機不同。如果程序指針由於某種原因指向了數據空間的地址,ARM會把數據按程序一樣解碼來運行,當然,這會導致無法預料的結果。
ARM可以直接從SDRAM里取指令和數據,操作就同SRAM一樣,數據讀寫指令使用上沒有什麼區別。
如果編譯器設置程序入口是那個SDRAM數據空間,AXD調試時自動把程序寫到了那個空間,程序指針就開始從那個空間開始運行。就是用RAM模擬ROM進行調試,但掉電後那個空間的程序會消失,如果需要掉電不丟失就得燒寫到ROM里。
ARM上電後都是從地址0x00000000開始運行的。
一般的ARM開發板的Flash(ROM)中已經燒寫了Bootloader,對開發板上的器件進行初始化,並能引導uCos等操作系統啟動,且有對Flash燒寫程序和指定程序從哪個地址開始運行的功能。編譯好的bin或hex等燒寫程序可識別格式的文件,用燒寫工具才能燒寫到Flash中,一般的模擬器不具備這個功能。
『玖』 如何編譯arm linux的go
Golang也就是Go語言,現在已經發行到1.4.1版本了,語言特性優越性和背後Google強大靠山什麼的就不多說了。Golang的官方提供了多個平台上的二進制安裝包,遺憾的是並非沒有發布ARM平台的二進制安裝包。ARM平台沒辦法直接從官網下載二進制安裝包來安裝,好在Golang是支持多平台並且開源的語言,因此可以通過直接在ARM平台上編譯源代碼來安裝。整個過程主要包括編譯工具配置、獲取Golang源代碼、設置Golang編譯環境變數、編譯、配置Golang行環境變數等步驟。
註:本文選用樹莓派做測試,因為樹莓派是基於ARM平台的。
1、編譯工具配置
據說下個版本的golang編譯工具要使用golang自己來寫,但目前還是使用C編譯工具的。因此,首先要配置好C編譯工具:
1.1 在Ubuntu或Debian平台上可以使用sudo apt-get install gcc libc6-dev命令安裝,樹莓派的RaspBian系統是基於Debian修改的,所以可以使用這種方法安裝。
1.2 在RedHat或CentOS 6平台上可以使用sudo yum install gcc libc-devel命令安裝。
安裝完成後可以輸入 gcc --version命令驗證是否成功安裝。
2、獲取golang源代碼
2.1 直接從官網下載源代碼壓縮包。
golang官網提供golang的源代碼壓縮包,可以直接下載,最新的1.4.1版本源代碼鏈接:https://storage.googleapis.com/golang/go1.4.1.src.tar.gz
2.2 使用git工具獲取。
golang使用git版本管理工具,也可以使用git獲取golang源代碼。推薦使用這個方法,因為以後可以隨時獲取最新的golang源代碼。
2.2.1 首先確認ARM平台上已經安裝了git工具,可以使用git --version命令確認。一般linux平台都安裝了git,沒有的話可以自行安裝,不同平台的安裝方法可以參考:http://git-scm.com/download/linux
2.2.2 克隆遠程golang的git倉庫到本地
在終端cd到你想要安裝golang的目錄,確保該目錄下沒有名為go的目錄。然後以下命令獲取代碼倉庫:
git clone https://go.googlesource.com/go
大陸地區可能會獲取失敗,在不翻牆的情況下我試了幾次都沒成功,原因大家都懂的。好在google已經將golang也託管到github上面,所以也可以通過下面命令獲取:
git clone https://github.com/golang/go.git
視網路情況,下載可能需要不少時間。我2M的帶寬花了將近兩個小時才下載完,雖然整個項目不過幾十兆= =
下載完成後,可以看到目錄下多了一個go目錄,裡面即為golang的源代碼,在終端上執行cd go命令進入該目錄。
執行下面命令檢出go1.4.1版本的源代碼,因為現在已經有新的代碼提交上去了,最新的代碼可能不是最穩定的:
git checkout go1.4.1
至此,最新1.4.1發行版的源代碼獲取完畢
3、設置golang的編譯環境變數
主要有GOROOT、GOOS、GOARCH、GOARM四個環境變數需要設置,先解釋四個環境變數的意義。
3.1 GOROOT
主要代表golang樹結構目錄的路徑,也就是上面git檢出的go目錄。一般可以不用設置這個環境變數,因為編譯的時候默認會以go目錄下src子目錄中的all.bash腳本運行時的父目錄作為GOROOT的值。為了保險起見,可以直接設置為go目錄的路徑。
3.2 GOOS和GOARCH
分別代表編譯的目標系統和平台,可選值如下:
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
需要注意的是這兩個值代表的是目標系統和平台,而不是編譯源代碼的系統和平台。樹莓派的RaspBian是linux系統,所以這些GOOS設置為linux,GOARCH設置為arm。
3.3 GOARM
表示使用的浮點運算協處理器版本號,只對arm平台有用,可選值有5,6,7。如果是在目標平台上編譯源代碼,這個值可以不設置,它會自動判斷需要使用哪一個版本。
總結下來,在樹莓派上設置golang的編譯環境變數,可編輯$HOME/.bashrc文件,在末尾添加下面內容:
export GOROOT=你的go目錄路徑
export GOOS=linux
export GOARCH=arm
編輯完後保存,執行source ~/.bashrc命令讓修改生效。
4、編譯源代碼
環境變數配置完成自後就可以開始編譯源代碼。在go目錄下的src子目錄中,主要有all.bash和make.bash兩個腳本(另外還有兩個all.bat和make.bat腳本適用於window平台)。編譯實際上就是執行其中一個腳本,兩者的區別在於all.bash在編譯完成後還會執行一些測試套件。如果希望只編譯不測試,可以運行make.bash腳本。使用cd命令進入go下src目錄,執行./all.bash或者./make.bash命令即可開始編譯。由於硬體情況不同,編譯耗費的時間不同。在我的B型樹莓派編譯過程花費了將近半個小時,編譯完成後執行的測試套件又花費了差不多一個小時,總共花費了一個半小時左右。
5、配置golang運行環境變數
編譯完成後,go目錄下會生成bin目錄,裡面就是go的運行腳本。為了以後使用方法,可以將這個bin路徑添加到PATH環境變數中。同樣編輯~/.bashrc文件,因為前面設置過GOROOT環境變數指向go目錄了,所以只需要在末尾加上
export PATH=$PATH:$GOROOT/bin
保存後同樣執行source ~/.bashrc命令讓環境變數生效。
至此,golang源代碼編譯安裝成功。執行go version應該就能看到當前golang的版本信息,表示編譯安裝成功。