main.go 的代码很简单,就是输出 Hello world!, 尝试交叉编译。
package main
import (
"fmt"
)
func main() {
fmt.Println("hello world")
}
本地开发用的 mac 系统,服务器ubuntu x86_64,尝试过以下 build 命令交叉编译
GOOS=linux GOARCH=amd64 go build main.go
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.go
在服务器上都不能运行,当然文件已改 777 了,报 Illegal instruction (core dumped)
也在本地尝试在 docker golang 的容器里编译,放服务器依然不能运行,报相同错误。
在服务器上下载 docker golang 容器,在服务器上直接编译,可以运行。然后,把服务器上的下载下来,本地 docker golang 容器里也无法运行,报 Trace/breakpoint trap 。
是因为本地和服务器的 cpu 不同导致编译的程序无法直接运行吗?本地是 cpu 是 Core ,服务器是 Xeon
提供更多的细节参考:
服务器是 google cloud 的 vm。
两边用过同样的 docker 镜像 golang:latest,编译之后,在各自端上都可以运行,但是本地编译的不能运行服务端,服务端的不能运行在本地,无论是否在宿主和容器内。
build 好的程序都是通过 ftp 来上传下载的。
服务器都是报 Illegal instruction (core dumped)
本地是报 Trace/breakpoint trap
按照 @东方星痕 的方案可以成功运行了,在本地 docker 里构建并直接打包镜像到服务器上可以运行成功,但是想知道为什么本机直接 go build 的文件不能在服务端运行 ^-^
你服务器装 Go 了吗?在你的服务器上执行 go env 确认下它的环境变量 GOOS 和 GOARCH,看是否和你配置的一样的。