GO 支持交叉编译,也就是说,可以用一个平台下的 Golang
编译器,生成另外一个平台下的可执行程序
平时一般是在 Linux
下编程,并且大部分的时间也是使用Docker
镜像,所以一般不会在意这个交叉编译的功能
但是,这两天公司另外一个部门突然让生成一个exe
文件,github刚docker安装开始想的是找个安装go
语言的windows
平台,然后将git
仓库上的代码拉取下来执行go build
就好了;后来发现,使用交叉编译实在是太方便了,只需要执行一行编译的命令github中文官网网页就搞定了
在linux
下生成Mac
和Window
的可执行程序镜像画面什么梗
CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build
在wi镜像投屏ndow
下生成Mac
和Linux
的可执行程序
SET CGO_ENABLED=0
SET GOOS=darwin
SET GOARCH=amd64
go build
SET CGO_ENABLED=0
SET GOOS=linux
SET GOARCH=amd64
go build
在Mac
下生成Linux
和Windows
下的可执行程序
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build
心想这windows系统样太简单了,这b不是分分中的事么,结果真是啪啪打脸啊
因为,在程序中用docker容器到了sqlite
,而sqlite
中又需要开启CGO
,也就是说,需要在GDockero
代码工资超过5000怎么扣税中用到c
语言编程,或者是调用C
代码的函数库
而golang
的交叉编译只能编译不同平台的go
代码,但是编宫颈癌译不了不同平台的C
代码,所以还需要安装一个指定平台的C
代码的编译器
因为,打算是在Linux
下编译生成windows
下64
的可执行程序,所以,就在Linux
下安装了一个windows
下的C工资超过5000怎么扣税
编docker和虚拟机的区别译器,命令如下:
sudo apt install mingw-w64
这条命令安装了如下的两个编译器:
32位windows编译器i686-w64-mingw32-gcc和i686-w64-mingw32-g++
64位windows编译器x86_64-w64-mingw32-gcc和x86_64-w64-mingw32-g++
安装之后,就可以指定用这个编龚俊译器编译了,命令如下:
export GOOS=windows
export GOARCH=amd64
export CC=x86_64-w64-mingw32-gcc //此处是指定 64 位的编译器,你可以指定 32 位的
export CXX=x86_64-w64-mingw32-g++
export CGO_ENABLED=1
配置env镜像
之后,再执行go build
就ok镜像
了;当然,你也可以那这写成一个windows是什么意思脚本文件:
#!/bin/bash
export GOOS=windows
export GOARCH=amd64
export CC=x86_64-w64-mingw32-gcc
export CXX=x86_64-w64-mingw32-g++
export CGO_ENABLED=1
go build .
之后需要交叉编译时,直接执行这个脚本就好了
注:因为golang
默认是开启cgo
的,你可以用go env
看到CGO_ENABLED="1"
,所以,如果你程镜像序中没用到c
编程或者调用C
的函数库,那最好在编译的时候指定CGO_ENABLED=0
,这样交叉编译就不需要这么复杂了
参考地工商银行址:blog.furry.top/archives/5/