美文网首页
Golang交叉编译各个平台的二进制文件

Golang交叉编译各个平台的二进制文件

作者: 路过麦田 | 来源:发表于2018-08-23 10:24 被阅读411次

熟悉golang的人都知道,golang交叉编译很简单的,只要设置几个环境变量就可以了

# mac上编译linux和windows二进制
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build 
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build 

# linux上编译mac和windows二进制
CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build 
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build

# windows上编译mac和linux二进制
SET CGO_ENABLED=0 SET GOOS=darwin SET GOARCH=amd64 go build main.go
SET CGO_ENABLED=0 SET GOOS=linux SET GOARCH=amd64 go build main.go

GOOS和GOARCH的值有哪些,可以网上搜,很多的

但是交叉编译是不支持CGO的,也就是说如果你的代码中存在C代码,是编译不了的,比如说你的程序中使用了sqlite数据库,在编译go-sqlite驱动时按照上面的做法是编译不通过的

需要CGO支持的,要将CGO_ENABLED的0改为1,也就是CGO_ENABLED=1,此外还需要设置编译器,例如我想在linux上编译arm版的二进制,需要这样做:

# Build for arm
CGO_ENABLED=1 GOOS=linux GOARCH=arm CC=arm-linux-gnueabi-gcc go build 

这个arm-linux-gnueabi-gcc是个啥东西,怎么安装,如果你系统是ubuntu的话,可以按照下面命令安装:

sudo apt-get install g++-arm-linux-gnueabi
sudo apt-get install gcc-arm-linux-gnueabi

安装成功后就可以编译了,但是如果你想编译mac版呢,或者想在mac上编译linux版,window版咋办,一个一个安装效率太慢,系统命令可以安装还好,系统命令不支持,那就得自己去搜,然后找到地址,下载,安装,费时又费力

github上有这个工具 https://github.com/karalabe/xgo

它是一个docker镜像,里面集成了各种平台的编译器,按照它的教程,很轻松的可以编译出各个平台的二进制文件,安装的时候比较耗时,需要下载大概1个G的数据,但是效果可是杠杠的

默认是编译所有平台的二进制的,会有些耗时,如果只需要某个特定平台的二进制,可以使用-targets参数

image.png

注意是-targets而不是--targets,我自己测试的时候--targets是会失败的

相关文章

  • Golang交叉编译各个平台的二进制文件

    熟悉golang的人都知道,golang交叉编译很简单的,只要设置几个环境变量就可以了 GOOS和GOARCH的值...

  • go如何进行交叉编译

    golang交叉编译 问题 golang如何在一个平台编译另外一个平台可以执行的文件。比如在mac上编译Windo...

  • golang进行交叉编译

    golang进行交叉编译 交叉编译即编译不同操作系统平台的可执行程序 golang执行交叉编译,只需要使用两个变量...

  • docker 部署 golang 项目

    Golang 支持交叉编译,在一个平台上生成另一个平台的可执行程序 一、交叉编译 Windows 下编译 Linu...

  • Alpine Linux Docker 中提示 sh: comm

    最近有项目需要上线,项目的各个服务都是由 golang 写的。启动服务直接运行编译好的二进制文件就行,于是准备使用...

  • Golang 多平台交叉编译

    本文为转载,原文:Golang 多平台交叉编译 介绍 一直以来都是在windows上写go,从来没有试过如何在wi...

  • Golang多平台交叉编译

    Golang 支持交叉编译,在一个平台上生成另一个平台的可执行程序,最近使用了一下,非常好用,这里备忘一下。 Ma...

  • 【golang】跨平台交叉编译

    Go语言支持交叉编译,在一个平台生成另一个平台的可执行程序 Mac 下编译 Linux 和 Windows 64位...

  • Go语言:编译其他系统的可执行程序

    Golang 支持在 不同平台 下生成 另一个平台 可执行程序 的 交叉编译功能即:不同系统下的 可执行文件 1....

  • Golang 交叉编译

    [TOC] 说明 本文交叉编译需要 1.5 以上 Golang Mac 下编译 windows 64 Golang...

网友评论

      本文标题:Golang交叉编译各个平台的二进制文件

      本文链接:https://www.haomeiwen.com/subject/sckpiftx.html