设置环境变量
set CGO_ENABLED=0
set GOOS=windows
set GOARCH=amd64如果在idea等工具中的命令行无效,大概率是因为PowerShell问题,如图

有两种解决方案
- 新开一个cmd窗口执行
使用go命令方式设置
go env -w CGO_ENABLED=0 go env -w GOOS=linux go env -w GOARCH=amd64
这里我是用第一种
执行编译
go build注意
CGO
如果不设置CGO_ENABLED = 0,可能会提示如下错误
# runtime/cgo
gcc_linux_amd64.c: In function '_cgo_sys_thread_start':
gcc_linux_amd64.c:57:2: error: unknown type name 'sigset_t'; did you mean '_sigset_t'?
sigset_t ign, oset;
^~~~~~~~
_sigset_t
gcc_linux_amd64.c:62:2: error: implicit declaration of function 'sigfillset' [-Werror=implicit-function-declaration]
sigfillset(&ign);
^~~~~~~~~~
gcc_linux_amd64.c:57:16: error: unused variable 'oset' [-Werror=unused-variable]
sigset_t ign, oset;
^~~~
cc1.exe: all warnings being treated as errors这个错误信息表明,你在 Windows 上进行 Go 代码编译时,Go 的 Cgo 部分尝试使用 C 编译器(在 Windows 上是 gcc)来编译与 C 语言相关的部分。因为你没有禁用 Cgo,而目标平台是 Linux,Cgo 正试图使用 Linux 的特定 C 库和头文件来编译,但你的 Windows 环境并没有适配 Linux 的相关编译工具和头文件。
此时有两种解决方案
禁用CGO
set CGO_ENABLED=0
//或者
go env -w CGO_ENABLED=0只要你的 Go 项目没有依赖 Cgo,你可以通过禁用 Cgo 来避免这些问题。
如果你的 Go 代码依赖于 C 语言库或使用了 Cgo 特性(例如,调用 C 语言代码),禁用 Cgo 会导致编译失败。因此,你必须确保项目中不使用 Cgo。
安装 Linux 交叉编译工具链(如果需要使用 Cgo)
如果你必须使用 Cgo,或者你的项目依赖于某些 C 语言库,你需要配置适当的交叉编译工具链。这通常涉及到安装与目标平台(Linux)兼容的交叉编译工具链。
- 对于 Linux 目标,你需要安装交叉编译工具链,如 mingw-w64 或 x86_64-linux-gnu-gcc 等。Windows 上的 Go 并不默认提供跨平台的 C 编译器,因此你需要额外安装交叉编译工具。
- 配置工具链后,Go 编译器能够在 Windows 上使用目标 Linux 平台的 C 编译器来编译 Cgo 代码。
评论 (0)