Golang交叉编译配置
问题描述
在阅读 kube-ovn 源码时,发现源码中引用的 netlink 库在 windows 环境下,有些代码引用失败。错误如下图:
这是因为 netlink 包在不同的操作系统下实现有差异,netlink 库 build 是区分操作系统的,我需要应用 linux 环境下的版本,但是在 Windows 的开发环境中,默认的操作系统是 windows,并且是开启 CGO 的,如下图:
![build tags](./2021-10-19-Golang交叉编译配置/build tags.png)
CGO_ENABLED=0的意思是使用C语言版本的GO编译器,参数配置为0的时候就关闭C语言版本的编译器了,交叉编译不支持 CGO 所以要禁用它。
解决方法
配置 Goland 的 build tags,设置 GOOS=linux,CGO_ENABLED=0,如下图所示:
![交叉编译build tags配置](./2021-10-19-Golang交叉编译配置/交叉编译build tags配置.png)
正确配置之后,netlink 包就能够正常引用了。
其他补充
Mac 下编译 Linux 和 Windows 64位可执行程序
1 | CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.go |
Linux 下编译 Mac 和 Windows 64位可执行程序
1 | CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build main.go |
Windows 下编译 Mac 和 Linux 64位可执行程序
1 | SET CGO_ENABLED=0 |
- GOOS:目标平台的操作系统(darwin、freebsd、linux、windows)
- GOARCH:目标平台的体系架构(386、amd64、arm)