Go Web 框架 Gin 实践 番外—Golang交叉编译 Go语言中文网,致力于每日分享编码知识,欢迎关注我,每天一起进步! $ CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o go-gin-example . 也就是 Golang 令人心动的特性之一跨平台编译 用于标识(宣告) cgo 工具是否可用 意义: 存在交叉编译的情况时,cgo 工具是不可用的。在标准go命令的上下文环境中,交叉编译意味着程式构建环境的目标计算架构的标识与程式执行环境的目标计算架构的标识不同,或者程式构建环境的目标操作系统的标识与程式执行环境的目标操作系统的标识不同前言
在 连载九 讲解构建Scratch映象时,我们编译可执行档案用了另外一个形式的命令,不知道你有没有疑问?说明
我们将讲解命令各个引数的作用,希望你在阅读时,将每一项串联起来,你会发现这就是交叉编译相关的小知识一、CGO_ENABLED
作用:
小结:
结合案例来说,我们是在宿主机编译的可执行档案,而在 Scratch 映象执行的可执行档案;显然两者的计算机架构、执行环境标识你无法确定它是否一致(毕竟构建的 docker 映象还可以给他人使用),那么我们就要进行交叉编译,而交叉编译不支援 cgo,因此这里要禁用掉它
关闭 cgo 后,在构建过程中会忽略 cgo 并静态连结所有的依赖库,而开启 cgo 后,方式将转为动态连结
补充:
golang 是预设开启 cgo 工具的,可执行 go env 命令检视
二、GOOS
用于标识(宣告)程式构建环境的目标操作系统如:
linuxwindows
三、GOARCH
用于标识(宣告)程式构建环境的目标计算架构若不设定,预设值与程式执行环境的目标计算架构一致(案例就是采用的预设值)
如:
amd64386
四、GOHOSTOS
用于标识(宣告)程式执行环境的目标操作系统五、GOHOSTARCH
用于标识(宣告)程式执行环境的目标计算架构六、go build
-a强制重新编译,简单来说,就是不利用快取或已编译好的部分档案,直接所有包都是最新的程式码重新编译和关联
-installsuffix
作用:
在软件包安装的目录中增加字尾标识,以保持输出与预设版本分开
补充:
如果使用 -race 标识,则字尾就会预设设定为 -race 标识,用于区别 race 和普通的版本
-o
指定编译后的可执行档名称
小结
大部分引数指令,都有一定关联性,且与交叉编译的知识点相关,可以好好品味一下最后可以看看 go build help 加深了解
参考
本系列示例程式码go-gin-example书籍
Go并发程式设计实战 第二版本系列作者:煎鱼,原创授权释出