• 欢迎来到本博客,希望可以y一起学习与分享

Golang交叉编译

笔记 benz 5个月前 (04-16) 12次浏览 0个评论 扫描二维码
文章目录[隐藏]

在windows下编译Linux可执行文件命令:

CGO_ENABLED

作用

用于标识(声明) cgo 工具是否可用

意义

存在交叉编译的情况时,cgo 工具是不可用的。在标准go命令的上下文环境中,交叉编译意味着程序构建环境的目标计算架构的标识与程序运行环境的目标计算架构的标识不同,或者程序构建环境的目标操作系统的标识与程序运行环境的目标操作系统的标识不同

小结

结合案例来说,我们是在宿主机编译的可执行文件,而在 Scratch 镜像运行的可执行文件;显然两者的计算机架构、运行环境标识你无法确定它是否一致(毕竟构建的 docker 镜像还可以给他人使用),那么我们就要进行交叉编译,而交叉编译不支持 cgo,因此这里要禁用掉它

关闭 cgo 后,在构建过程中会忽略 cgo 并静态链接所有的依赖库,而开启 cgo 后,方式将转为动态链接

补充

golang 是默认开启 cgo 工具的,可执行 go env 命令查看

GOOS

用于标识(声明)程序构建环境的目标操作系统

如:

  • linux
  • windows

GOARCH

用于标识(声明)程序构建环境的目标计算架构

若不设置,默认值与程序运行环境的目标计算架构一致(案例就是采用的默认值)

如:

  • amd64
  • 386
系统 GOOS GOARCH
Windows 32位 windows 386
Windows 64位 windows amd64
OS X 32位 darwin 386
OS X 64位 darwin amd64
Linux 32位 linux 386
Linux 64位 linux amd64

GOHOSTOS

用于标识(声明)程序运行环境的目标操作系统

GOHOSTARCH

用于标识(声明)程序运行环境的目标计算架构

go build

-a
强制重新编译,简单来说,就是不利用缓存或已编译好的部分文件,直接所有包都是最新的代码重新编译和关联

-installsuffix
作用:

在软件包安装的目录中增加后缀标识,以保持输出与默认版本分开

补充:

如果使用 -race 标识,则后缀就会默认设置为 -race 标识,用于区别 race 和普通的版本

-o
指定编译后的可执行文件名称


文章 Golang交叉编译 转载需要注明出处
喜欢 (0)

您必须 登录 才能发表评论!