Mac下交叉编译linux golang程序
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mac下交叉编译linux golang程序相关的知识,希望对你有一定的参考价值。
参考技术A 一、背景介绍闲来无事,申请了台aws服务器在家搞点小东东,用golang做了个小东东,想放上去。自己的电脑是mac电脑,起初忘记了交叉编译的事,直接编译了下直接扔到aws,运行的时候出现了不可以运行的二进制格式提示。
二、交叉编译的过程
1、随手百度了下,很多文章都写的“CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build”(不知你搜索到的是不是这个结果),看到这也挺简单,分别是禁用cgo,指定目标系统,指定目标CPU体系架构,然后编译。
按照百度出来的建议,尝试在电脑上编译了下,提示如下错误,如果没有出现错误的可以不用往下看了哈。
2、如第一步所述,是将CGO关闭的状态,如果程序用到了CGO,是不是就需要将CGO放开?将CGO放开又会是什么现象?具体如下:
从上述的错误信息可以看出来,环境变量是生效的,确实是linux体系架构了。
3、继续百度,https://blog.csdn.net/zhaoli081223/article/details/121255583 终于发现这篇文章非常不错,在这里和大家分享下,按照文章的操作就可以解决问题了,而且里面有非常详细的讲解。
Golang 在 MacLinuxWindows 下交叉编译
Golang 支持在一个平台下生成另一个平台可执行程序的交叉编译功能。
Mac下编译Linux, Windows平台的64位可执行程序:
1 CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build [application | gofile.go] 2 CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build [application | gofile.go]
Linux下编译Mac, Windows平台的64位可执行程序:
1 CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build [application | gofile.go] 2 CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build [application | gofile.go]
Windows下编译Mac, Linux平台的64位可执行程序:
1 SET CGO_ENABLED=0 2 SET GOOS=darwin 3 SET GOARCH=amd64 4 go build [application | gofile.go] 5 6 SET CGO_ENABLED=0 7 SET GOOS=linux 8 SET GOARCH=amd64 9 go build [application | gofile.go]
GOOS:目标可执行程序运行操作系统,支持 darwin,freebsd,linux,windows
GOARCH:目标可执行程序操作系统构架,包括 386,amd64,arm
Golang version 1.5以前版本在首次交叉编译时还需要配置交叉编译环境:
1 CGO_ENABLED=0 GOOS=linux GOARCH=amd64 ./make.bash 2 CGO_ENABLED=0 GOOS=windows GOARCH=amd64 ./make.bash
make.bash文件只在Golang源码编译安装情况下才用。
以上是关于Mac下交叉编译linux golang程序的主要内容,如果未能解决你的问题,请参考以下文章
Golang 在 MacLinuxWindows 下交叉编译