当前位置:首页 > Golang > 正文内容

MAC交叉编译Win程序时出现undefined: syscall.SIGUSR2、undefined: syscall.Kill等错误

6个月前 (09-07)Golang782

mac下使用交叉编译windows程序时

CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build

出现报错如下:

# github.com/facebookgo/grace/gracehttp
../../go/pkg/mod/github.com/facebookgo/grace@v0.0.0-20180706040059-75cf19382434/gracehttp/http.go:104:61: undefined: syscall.SIGUSR2
../../go/pkg/mod/github.com/facebookgo/grace@v0.0.0-20180706040059-75cf19382434/gracehttp/http.go:114:16: undefined: syscall.SIGUSR2
../../go/pkg/mod/github.com/facebookgo/grace@v0.0.0-20180706040059-75cf19382434/gracehttp/http.go:154:21: undefined: syscall.Kill

这是因为项目引用了

github.com/facebookgo/grace/gracehttp

这个需要信号 syscall.SIGUSR2、syscall.Kill,而Go中的windows相关代码不支持这些信号。


解决办法如下:

在mac安装go的目录中找到如下文件截屏2025-09-07 17.01.50.png

使用编辑器打开文件,找到如下代码补充最后三项

var signals = [...]string{
1:  "hangup",
2:  "interrupt",
3:  "quit",
4:  "illegal instruction",
5:  "trace/breakpoint trap",
6:  "aborted",
7:  "bus error",
8:  "floating point exception",
9:  "killed",
10: "user defined signal 1",
11: "segmentation fault",
12: "user defined signal 2",
13: "broken pipe",
14: "alarm clock",
15: "terminated",
16: "SIGUSR1",
17: "SIGUSR2",
18: "SIGTSTP",
}

再在下边补充如下代码:

func Kill(...interface{}) {
    return;
}
const (
    SIGUSR1 = Signal(0x10)
    SIGUSR2 = Signal(0x11)
    SIGTSTP = Signal(0x12)
)

保存时可能没有权限,先另存文件到桌面,在拷贝进目录替换文件。

再次运行,依然报错

截屏2025-09-07 17.23.03.png查看源码截屏2025-09-07 17.24.18.png

原来需要返回值,重新修改刚才的文件,Kill方法加上error类型返回值,返回nil即可;

截屏2025-09-07 17.24.47.png

再次运行,OK了。

返回列表

上一篇:composer 升级ThinkPHP框架命令

没有最新的文章了...

相关文章

golang在Mac环境编译 Linux 和 Windows可执行程序

CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.go CGO_ENABLED=0 ...