背景
公司的业务框架依赖了 cgo,开发环境一般都选用 Windows 系统,那么就要配置 cgo 环境使得拉下来的项目能够运行起来。
如何配置cgo环境?本文基于 Go1.18.5 和 Win10 专业版 1903 版本进行配置。
开始
首先确保本地 go env 的环境中 CGO_ENABLED=1 。然后在网上搜索 MinGW 的安装方式,这里需要安装64位的版本。
不是所有的 MinGW 的工具链都可以使用,例如 winlibs.com/ 这里的版本也许你安装后可以正常编译,那就万事大吉。但是我在环境配好之后,gcc编译c语言文件没有问题,使用了cgo的go语言文件会报错:
C:\Program Files\Go\pkg\tool\windows_amd64\link.exe: running gcc failed: exit status 1 d:/tools/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/4.8.2/../../../../x86_64-w64-mingw32/bin/ld.exe: unrecognized option '--high-entropy-va' d:/tools/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/4.8.2/../../../../x86_64-w64-mingw32/bin/ld.exe: use the --help option for usage information collect2.exe: error: ld returned 1 exit status
最后找到个解决方案:github.com/golang/go/i… ,按照这个 issue 下面的说法是工具链可能太旧了,可以在他提到的链接 github.com/mstorsjo/ll… 里找到个比较新的 x86_64.zip 解压下来,我下载的文件是 github.com/mstorsjo/ll… ,解压后配置环境变量再编译需要cgo的go项目就可以运行了,至此问题解决。
验证
当编译好的 MinGW 被解压到本地目录后,将点开解压后的文件夹进入 bin 目录,将该路径配置到环境变量。此时打开终端,输入 gcc -v,可以输出安装的 gcc 版本。接下来可以使用以下文件验证 cgo 的环境是否已经准备好了。
package main
//#include <stdio.h> // 序文中可以链接标准C程序库
import "C"
func main() {
C.puts(C.CString("Hello, Cgo\n"))
}
如果可以编译并运行,那么环境就没问题,否则就根据提示信息看是环境变量有问题还是下载的 MinGW 有问题。