Go语言win10出现:CreateProcess error=216 xxx的问题exec %1 xxx. xxx file does not exist. - Go语言中文社区

Go语言win10出现:CreateProcess error=216 xxx的问题exec %1 xxx. xxx file does not exist.


Go语言win10出现:CreateProcess error=216 xxx的问题exec %1 xxx. xxx file does not exist.

问题展示

Go语言出现:CreateProcess error=216, 该版本的 %1 与你运行的 Windows 版本不兼容。请查看计算机的系统信息,然后联系软件发布者.

1.问题
在这里插入图片描述
2.问题

PS D:\repo\tmp\main> go run .\main.go
exec: "C:\\Users\\Administrator\\AppData\\Local\\Temp\\go-build3285596460\\b001\\exe\\main": file does not exist

3.问题

fork/exec C:\Users\Administrator\AppData\Local\Temp\go-build3040716459\b001\exe\main.exe: This version of %1 is not compatible with the version of W
indows you're running. Check your computer's system information and then contact the software publisher.

解决

解决办法:请注意,go中main为程序入库,该main函数必须在main包中,才可以执行

package main

import "fmt"

func main() {
    fmt.Println("hello world!")
}

如果修改了package为main包之后,还是没有解决,那么将你的 .idea 文件删除,然后重启一下goland,并重新选择go sdk,然后再运行该程序,如果还是没有解决,依然报这个问题,那么请继续往下看

解决:cmd中,或者在goland的terminal中执行 go env 查看环境变量,如下

PS D:\repo\goland_prj_test> go env
set GO111MODULE=on
set GOARCH=amd64                                                
set GOEXE=.exe
set GOEXPERIMENT=
set GOFLAGS=
set GOHOSTARCH=amd64
set GOHOSTOS=windows
set GOINSECURE=
set GOMODCACHE=D:\repo\vsavefile\go\pkg\mod
set GONOPROXY=
set GONOSUMDB=
set GOOS=windows
set GOPATH=D:\repo\vsavefile\go;C:\Users\Administrator\go
set GOPRIVATE=
set GOPROXY=https://goproxy.cn
set GOROOT=D:\tools\prj_tools\g_goland_gosdk\go_1_18_sdk_install
set GOSUMDB=sum.golang.org
set GOTMPDIR=
set GOTOOLDIR=D:\tools\prj_tools\g_goland_gosdk\go_1_18_sdk_install\pkg\tool\windows_amd64
set GOVCS=
set GOVERSION=go1.18
set GCCGO=gccgo
set GOAMD64=v1
set AR=ar
set CC=D:\tools\prj_tools\m_MinGW\m_mingw_install\bin\gcc.exe
set CXX=D:\tools\prj_tools\m_MinGW\m_mingw_install\bin\gcc.exe
set CGO_ENABLED=0
set GOMOD=D:\repo\goland_prj_test\go.mod
set GOWORK=
set CGO_CFLAGS=-g -O2
set CGO_CPPFLAGS=
set CGO_CXXFLAGS=-g -O2
set CGO_FFLAGS=-g -O2
set CGO_LDFLAGS=-g -O2
set PKG_CONFIG=pkg-config
set GOGCCFLAGS=-m64 -fmessage-length=0 -fdebug-prefix-map=C:\Users\Administrator\AppData\Local\Temp\go-build637233741=/tmp/go-build -gno-record-gcc-
switches

如下:为windows10的环境变量. 你并不需要将所有的环境变量设置的和我一样,你需要关注的只有3个地方

  1. GOARCH=amd64 GOARCH 表示目标处理器架构。
  2. GOOS=windows GOOS 表示目标操作系统。
  3. CGO_ENABLED=0 CGO_ENABLED交叉编译 1.开启 0.关闭

将这三个值修改成如上的三个值即可。修改的命令如下(永久生效)

go env -w GOARCH=amd64
go env -w GOOS=windows
go env -w CGO_ENABLED=0

此时,再去运行你的程序,应该是可以正常运行了。

原因

原因:

一般来说,你第一次在win10上安装go sdk之后,这些环境变量都是默认的(除了GO111MODULE,GOPROXY,GOPATH,GOROOT之类的需要你自己设置之外)

唯一可能会修改他们的地方是:你需要将win10下的go项目编译成linux下可执行的 可执行程序,windows10下编译程序为linux可执行程序,如下:接着往下看
而将程序编译成linux可执行的 可执行程序的前提条件就是设置3个环境变量,CGO_ENABLED默认为0

在cmd中,进入到你的main.go程序所在的路径,执行如下命令。或者在goland中打开goland的terminal,然后进入到你的main.go所在目录也可。

SET CGO_ENABLED=0   //仅当你的项目有c/c++代码,需要交叉编译的时候,才设置为1   1.开启  0.关闭
SET GOOS=linux		//目标操作系统为linux
SET GOARCH=amd64   //目标处理器架构为 amd64

go build -o helloworld main.go	//此时生成的helloworld可执行程序,直接放到linux上就可以运行了
//如果你没有设置上面的三个参数(实际GOOS,GOARCH也可以),那么你执行go build生成的程序在linux上执行时,会报类似 —— 无法运行的二进制文件之类的问题

注意:上面的这种:SET CGO_ENABLED=0的方式,只会在当前的窗口生效(即临时生效),窗口关闭之后,就失效了

而之前提到的 go env -w CGO_ENABLED=0 的方式是永久生效,所以如果你是纯go项目(不包含cgo交叉编译的话),并且你只想本次编译成linux可执行的程序,之后还想在win10下通过goland调试、测试代码的话,请用 SET CGO_ENABLED=0 这种临时生效的方式

因为有时候使用永久生效的方式,设置环境变量会给你后续的其它操作带来一些意想不到的报错(除非你能很明确知道自己设置环境变量是为了什么)。比如

比如:你可能手误,在windows10下,设置了如下的go环境

go env -w GOARCH=arm
go env -w GOOS=linux
go env -w CGO_ENABLED=0

那么此时,你在win10下去运行程序的时候(go run main.go 或者 使用goland的run),你会发现报错:xxx%1 与你当前的操作系统不符之类的问题

之所以最上面提到用 go env -w xxx 的方式,让你修改win10下的环境变量,是因为 - 你可能之前将环境变量永久生效成了非win10所需的环境变量,那么你就得将这些环境变量修改回来(win10所需的环境变量,并且是永久生效的,懂的应该都懂了-0-)

至此 %1 与你系统不兼容的问题应该就得到解决了,如果还有错误,那可能依然是go env环境变量有问题(网上搜你的操作系统对应的一些环境变量的值),或者idea出了问题(删除你项目中的 .idea 文件夹),再或者go的sdk出了问题(卸载重装,或者升级你的sdk版本)

个别命令行说明:

执行 go env 指令,将输出当前 Go 开发包的环境变量状态。

GOARCH 表示目标处理器架构。

GOBIN 表示编译器和链接器的安装位置。

GOOS 表示目标操作系统。

GOPATH 表示当前工作目录。

GOROOT 表示 Go 开发包的安装目录。

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/weixin_48536164/article/details/126866878
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2023-01-05 01:07:48
  • 阅读 ( 282 )
  • 分类:Go

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢