我去信封
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
5条答案
按热度按时间m3eecexj1#
从go 1.5开始,交叉编译变得非常简单。
请参阅http://dave.cheney.net/2015/08/22/cross-compilation-with-go-1-5。
67up9zun2#
我也遇到了同样的问题。我安装了64位版本的Go而不是32位版本。安装32位版本后工作正常。
6tdlim6h3#
当我下载x86版本的golang时,我遇到了这种情况,但我提供的VM是一个ARM CPU。
您可以在此处下载ARM:https://go.dev/dl/
gjmwrych4#
您的二进制文件可能会动态链接到一些C库,而这些C库并未安装在您的操作系统上。例如,如果您在与运行二进制文件的环境不同的环境中编译,则可能会发生这种情况。
要获取有关二进制文件的一些信息,可以同时运行
file ./your-binary
和ld ./your-binary
。我推荐这篇文章来解决这个问题:Go-compiled binary won't run in an alpine docker container on Ubuntu host
基本上,您的选项包括:
zysjyyx45#
在Windows上,请确保您(或您的IDE)没有运行PowerShell - powershell不会接受
set GOOS
,也不会抛出错误,但仍会编译二进制文件,当您将二进制文件部署到服务器时,您会发现此错误。