闲来无事,申请了台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 终于发现这篇文章非常不错,在这里和大家分享下,按照文章的 *** 作就可以解决问题了,而且里面有非常详细的讲解。
mac下编译器默认编译的是mac os x的可执行文件。编译centos上的可执行文件的时候需要交叉编译。
golang的交叉编译很容易,情况用下面这条命令 GOOS=linux GOARCH=amd64 go build ./文件
只需要指定目标 *** 作系统的平台和处理器架构即可:
因为不支持CGO,所以要禁用CGO
然后再执行go build命令,得到的就是能够在Linux平台运行的可执行文件了。
Mac 下编译 Linux 和 Windows 平台 64位 可执行程序:
Linux下编译 Mac 和 Windows 平台64位可执行程序:
Windows下编译Mac平台64位可执行程序:
整个过程看起来非常简单,运行起来也非常简单,调用make release命令,并给VERSION变量赋值不同的版本号即可:
命令会编译出不同平台可运行的压缩包:
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)