最近在玩2样东西,同样是go语言(golang),同样是Raspberry Pi(树莓派)。那么能在Raspberry上运行go语言程序吗? golang
Golang的文档上说是支持多平台的,其中也包括了ARM,看来有戏了,兴冲冲打开http://code.google.com/p/go/downloads/list (golang编译器的下载页面) ,却发现没有arm平台的二进制大包下载。因此arm平台下的须要下载源码本身编译。 ubuntu
一。俗话说巧妇难为无米之炊,要编译源码先得下源码,下载后这里解压到 /home/pi/go 目录下。 vim
二。确认须要的工具系统已经具有了:mercurial 、gcc 和 libc6-dev 。若是不肯定有没有只需输入下列命令: 浏览器
sudo apt-get install -y mercurial gcc libc6-dev bash
以上命令实现安装3个必需的工具。 工具
三。配置环境变量。由于第一点的时候我把下载下来的源码解压到/home/pi/go 目录下了,因此将GOROOT变量值设置为该路径: 学习
export GOROOT=/home/pi/go 测试
export GOARCH=arm ui
但其实不设置的话也是能够的,它默认是等一下命令行执行位置的父目录。 google
四。也是配置环境变量。GOARM 变量能够不设置,默认值为:“6″。可是实际中证实,若是不设置为值为“5″的话,编译会出现以下的错误:SIGILL: illegal instruction 。那么设置为5和6有什么区别呢?将 GOARM 设置为5会引发链接器发出指令来调用软件浮点数实现,而非使用硬件浮点数支持。
export GOARM=”5″
五。分配更多的内存给cpu使用。这不是必须的,更大的内存有助于缩减编译时间。使用:sudo raspi-config 中的memory_split功能来实现。
打开命令行,进入go目录下的src目录:
cd /home/pi/go/src
运行all.bash脚本
./all.bash
或者你想看看整个编译耗时多少的话能够这样:
time ./all.bash
好了。通过漫长的时间后:
pi@raspberrypi ~/go/src $ time ./all.bash
real 47m34.894s
user 44m23.260s
sys 2m6.690s
整个过程消耗了47分钟。编译完成了。而在个人电脑上这个过程只须要3分钟。
以上过程只是在Rapsberry上编译golang的编译器,若是咱们只想在Raspberry上运行go语言编写的程序,那大可不用这样子,咱们可使用交叉编译在本身的电脑上完成代码的编译后copy到Raspberry上运行即可了。
最近发现go语言的官网已经没法访问了,这给学习带来不少不便。这里提供一个比较简单的方法。
一。输入命令:nslookup www.google.com 8.8.8.8
获得google的ip地址列表若干,而后随机复制一个ip,在浏览器上输入,看看可否打开google的搜索页面。若是能,则继续第二步。
二。打开系统hosts文件,ubuntu12下默认为/etc/hosts 。加入一行:
<第一步获得的ip地址> golang.org
例如:74.125.128.102 golang.org
好了,看看能够打开官网了吗!
其实就是交叉编译。将golang源码解压到/home/lixin/soft/goarm5目录下。
命令行进入到/home/lixin/soft/goarm5/src 。
运行以下命令:
export GOROOT=/home/lixin/soft/goarm5
export GOARCH=arm
export GOARM=5
./all.bash
大概几分钟后,就建好了适合Raspberry上运行的编译器了。
接着来些个hello world测试程序。
vim /home/lixin/main.go
main.go文件内容以下:
package main
import “fmt”
func main(){
fmt.Println(“hello lixin”)
}
交叉编译:
/home/lixin/soft/goarm5/bin/go build ./main.go
将生成的main文件拷贝到Raspberry上运行。很是好,正确的在屏幕中打印出“hello lixin”