设为首页 收藏本站
查看: 918|回复: 0

[经验分享] Golang的跨平台编译程序

[复制链接]

尚未签到

发表于 2018-9-19 13:19:00 | 显示全部楼层 |阅读模式
  Golang支持交叉编译,也就是说你在32位平台的机器上开发,可以编译生成64位平台上的可执行程序。
  交叉编译依赖下面几个环境变量:
  $GOARCH    目标平台(编译后的目标平台)的处理器架构(386、amd64、arm)
  $GOOS          目标平台(编译后的目标平台)的操作系统(darwin、freebsd、linux、windows)
  各平台的GOOS和GOARCH参考 
  OS                   ARCH                          OS version
  linux                386 / amd64 / arm             >= Linux 2.6
  darwin               386 / amd64                   OS X (Snow Leopard + Lion)
  freebsd              386 / amd64                   >= FreeBSD 7
  windows              386 / amd64                   >= Windows 2000
  跨平台编译步骤:
一、了解目标平台架构:
  下面几个命令有助于了解目标平台的架构:
  [root@localhost ~]# uname -a
  Linux localhost.localdomain 2.6.32-279.19.1.el6.x86_64 #1 SMP Wed Dec 19 07:05:20 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux
  [root@localhost ~]# uname -m
  x86_64
  [root@localhost ~]# arch
  x86_64
  [root@localhost ~]# file /bin/cat
  /bin/cat: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, stripped
  [root@localhost ~]#
  这里可以看到这个服务器的架构是 x86_64 这个架构亦称 amd64.

  • 6g是amd64的go编译器,它生成的是.6文件。
  • 386一般使用8g命令,它生成的一般是.8格式的文件。
  • 当然还有一个5g的命令是用于arm的cpu,
  同理amd64用6l,386用8l,arm用5l的链接器
  参考资料:
  Linux下如何查看系统是32位还是64位的?
  http://blog.csdn.net/whucs_b701/article/details/8543499
二、准备目标平台需要的包和工具文件
  执行下面命令:
  $ cd /usr/local/go/src
  $ sudo CGO_ENABLED=0 GOOS=linux GOARCH=amd64 ./make.bash
  这里 额外多一个环境变量 CGO_ENABLED 是因为 交叉编译不支持 CGO,我们这里禁用它。
  这里并不是重新编译Go,因为安装Go的时候,只是编译了本地系统需要的东西;而需要跨平台交叉编译,需要在Go中增加对其他平台的支持。所以,有 ./make.bash 这么一个过程。
  执行结果类似如下:
  sudo CGO_ENABLED=0 GOOS=linux GOARCH=amd64 ./make.bash
  Password:
  # Building C bootstrap tool.
  cmd/dist
  # Building compilers and Go bootstrap tool for host, darwin/amd64.
  lib9
  libbio
  libmach
  misc/pprof
  cmd/addr2line
  cmd/cov
  cmd/nm
  cmd/objdump
  cmd/pack
  cmd/prof
  cmd/cc
  …...
  pkg/text/template/parse
  pkg/text/template
  pkg/go/doc
  pkg/go/build
  cmd/go
  pkg/runtime (linux/amd64)
  # Building packages and commands for host, darwin/amd64.
  runtime
  errors
  sync/atomic
  unicode
  unicode/utf8
  math
  sync
  unicode/utf16
  crypto/subtle
  io
  syscall
  ……….
  net/rpc/jsonrpc
  testing/iotest
  testing/quick
  # Building packages and commands for linux/amd64.
  runtime
  errors
  sync/atomic
  unicode
  unicode/utf8
  math
  sync
  unicode/utf16
  ……..
  testing
  net/rpc/jsonrpc
  testing/iotest
  testing/quick
  ---
  Installed Go for linux/amd64 in /usr/local/go
  Installed commands in /usr/local/go/bin
  安装完成后,我们可以看到 Go的安装目录下 多了这个平台特有的几个命令行工具。
DSC0000.png

三、编译对应平台下的执行文件
  到源代码目录下执行:
  CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build
  不带前面参数的 go build 只是编译出开发环境适用的执行文件。
  参考资料:
  Cross compile Go on OSX?
  http://stackoverflow.com/questions/12168873/cross-compile-go-on-osx
  跨平台编译Go程序
  http://bbs.studygolang.com/thread-65-1-1.html
  http://solovyov.net/en/2012/cross-compiling-go/
  http://studygolang.com/topics/21
  An introduction to cross compilation with Go
  http://dave.cheney.net/2012/09/08/an-introduction-to-cross-compilation-with-go


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-594301-1-1.html 上篇帖子: golang的多协程实践 下篇帖子: 初生牛犊不怕虎 golang入坑系列
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表