golang无法执行二进制文件:Exec格式错误

qqrboqgw  于 2022-12-07  发布在  Go
关注(0)|答案(5)|浏览(852)

我去信封

GOARCH="amd64"
GOBIN=""
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH=""
GORACE=""
GOROOT="/usr/local/go"
GOTOOLDIR="/usr/local/go/pkg/tool/linux_amd64"
GO15VENDOREXPERIMENT=""
CC="gcc"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0"
CXX="g++"
CGO_ENABLED="1"

我在我的mac上编译并成功地执行了这个二进制文件,然后把它复制到ubuntu机器上,它的go env如上面所示。

bash: /usr/local/go/bin/myprog: cannot execute binary file: Exec format error
m3eecexj

m3eecexj1#

从go 1.5开始,交叉编译变得非常简单。

env GOOS=linux GOARCH=amd64 go build -v github.com/constabulary/gb/cmd/gb

请参阅http://dave.cheney.net/2015/08/22/cross-compilation-with-go-1-5

67up9zun

67up9zun2#

我也遇到了同样的问题。我安装了64位版本的Go而不是32位版本。安装32位版本后工作正常。

6tdlim6h

6tdlim6h3#

当我下载x86版本的golang时,我遇到了这种情况,但我提供的VM是一个ARM CPU。
您可以在此处下载ARM:https://go.dev/dl/

gjmwrych

gjmwrych4#

您的二进制文件可能会动态链接到一些C库,而这些C库并未安装在您的操作系统上。例如,如果您在与运行二进制文件的环境不同的环境中编译,则可能会发生这种情况。
要获取有关二进制文件的一些信息,可以同时运行file ./your-binaryld ./your-binary
我推荐这篇文章来解决这个问题:Go-compiled binary won't run in an alpine docker container on Ubuntu host
基本上,您的选项包括:

  • 运行在与编译相同的架构/操作系统上
  • 在目标操作系统上安装缺少的库
  • 尝试静态编译
zysjyyx4

zysjyyx45#

在Windows上,请确保您(或您的IDE)没有运行PowerShell - powershell不会接受set GOOS,也不会抛出错误,但仍会编译二进制文件,当您将二进制文件部署到服务器时,您会发现此错误。

相关问题