golang交叉编译

golang传的很牛X,但不能交叉编译,对我来说一点用都没有,有个开源项目是用golang写的,如果不能在arm上用,那么我只能将它“翻译”成C,再集成到我的产品中,但我没有这个时间。

好在交叉编译最后还是成功了。

1. 准备工作

1.1 golang环境及arm交叉编译工具

可以参考《golang安装手札》这篇文章。

1.2 GCC交叉编译器

在1.1基础上,已经可以编译能在Arm上运行的纯golang写的二进制了,但有一个尚未解决的问题是:golang与C联合开发的模块,编译时报错:

can't load package: no buildable Go source files in /...

问题原因在于,关闭cgo的情况下,golang的编译器会自动“忽略”掉带有"import "C""字样的源文件。解决这个问题需要打开cgo的支持,如编译时的命令改为:

GOARCH=arm CGO_ENABLED=1 go build hello.go

但这还不够,还需要安装arm平台的编译器,如gcc-4.7-arm-linux-gnueabi(版本号要与目标平台的版本号一致),以及gcc-4.7-multilib-arm-linux-gnueabi的支持。还需要将/usr/bin/gcc重新ln到arm的交叉编译器上。

完成以上工作后,import "C"就没问题了。

1.3 第三方库

使用import "C"的主要目的就是使用第三方开源库,golang查找第三方库使用的是pkg-config,首先要保证pkg-config正常工作;另外,要保证第三方库,及第三方库的依赖库,都是arm版本的,才能正常link成功。链接成功的golang的程序,就可以愉快的在arm板上运行了。

golang的初步冒险就到些结束了,从下代码到完成这篇blog,用时一天多的时间,我的程序也快乐的在板子上运行中。

你可能感兴趣的:(golang交叉编译)