golang交叉编译

本文详细介绍了如何使用Go语言进行跨平台编译,包括在Mac、Linux和Windows上编译不同操作系统和架构的二进制文件。强调了CGO_ENABLED在交叉编译中的作用,以及在涉及C代码时的注意事项。同时,推荐了一个名为xgo的工具,它基于Docker,可以简化多平台编译的过程,避免手动安装各种编译器。
摘要由CSDN通过智能技术生成

编译命令

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的值

GOOS和GOARCH支持列表

GOOS - Target Operating SystemGOARCH - Target Platform
androidarm
darwin386
darwinamd64
darwinarm
darwinarm64
dragonflyamd64
freebsd386
freebsdamd64
freebsdarm
linux386
linuxamd64
linuxarm
linuxarm64
linuxppc64
linuxppc64le
linuxmips
linuxmipsle
linuxmips64
netbsd386
netbsdarm
netbsdamd64
netbsdmips64
solarisamd64
windows386
windowsamd64
env GOOS=target-OS GOARCH=target-architecture go build package-import-path
  • 但是交叉编译是不支持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

在linux上编译arm平台的二进制

sudo apt-get install libc6-armel-cross libc6-dev-armel-cross binutils-arm-linux-gnueabi libncurses5-dev 
sudo apt-get install gcc-arm-linux-gnueabi g++-arm-linux-gnueabi 
CGO_ENABLED=1 GOOS=linux GOARCH=arm go build

在linux上编译arm64平台的二进制

sudo apt-get install gcc-aarch64-linux-gnu 
CGO_ENABLED=1 GOOS=linux GOARCH=arm64 go build
  • 如果提示找不到openssl/rand.h文件,可以尝试下面的方案:
# for macOS: 
brew install openssl 
brew link openssl --force 
或者 
export CGO_LDFLAGS="-L/usr/local/opt/openssl/lib" 
export CGO_CPPFLAGS="-I/usr/local/opt/openssl/include" 

# for Debian, Ubuntu 
sudo apt-get install libssl-dev

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

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

	它是一个docker镜像,里面集成了各种平台的编译器,按照它的教程,很轻松的可以编译出各个平台的二进制
文件,安装的时候比较耗时,需要下载大概1个G的数据,但是效果可是杠杠的,默认是编译所有平台的二进制的,
会有些耗时,如果只需要某个特定平台的二进制,可以使用-targets参数

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值