golang交叉编译

coroutines · · 5619 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

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,用时一天多的时间,我的程序也快乐的在板子上运行中。


有疑问加站长微信联系(非本文作者)

本文来自:CSDN博客

感谢作者:coroutines

查看原文:golang交叉编译

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

5619 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传