golang编译Arm64版本出现 “undefined: syscall.Dup2”解决方式

前言

由于系统架构需要,同一个项目需要编译成不同的版本,在amd64架构下编译通过,但是在arm64架构下,编译出现“undefined: syscall.Dup2”问题

..\..\github\vkcom\ [email protected] \srvfunc\common.go:169:2: undefined: syscall.Dup2

在 Arm 架构中,没有提供 Dup2 的方法,因此出现以上编译问题。

解决

查阅资料,发现Arm 架构的 linux 中实现了 Dup3 方法代替 Dup2,因此修改代码为 Dup3,即可解决该问题

golang编译Arm64版本出现 “undefined: syscall.Dup2”解决方式_第1张图片

Dup3与Dup2参数略有差异,dup(int filedes)函数返回一个可用的与filedes共享文件表项的最小描述符。而dup2(int filedes,int filedes2)是使用一个描述符filedes2去指向filedes2文件表项(也是共享),但是在调用dup2之前要确保filedes2为可用描述符。代码修改如下:

golang编译Arm64版本出现 “undefined: syscall.Dup2”解决方式_第2张图片
golang编译Arm64版本出现 “undefined: syscall.Dup2”解决方式_第3张图片

结论

再次运行,编译通过

set GOARCH=arm64

go build -o project main.go

你可能感兴趣的:(大数据,golang,go)