MAC交叉编译Win程序时出现undefined: syscall.SIGUSR2、undefined: syscall.Kill等错误
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的目录中找到如下文件
使用编辑器打开文件,找到如下代码补充最后三项
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)
)保存时可能没有权限,先另存文件到桌面,在拷贝进目录替换文件。
再次运行,依然报错
查看源码
原来需要返回值,重新修改刚才的文件,Kill方法加上error类型返回值,返回nil即可;

再次运行,OK了。

