在WINDOWS下交叉编译LINUX程序运行不了是为什么?

go语言版本是1.5.2,最简单的程序:

package main

import "fmt"

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

编译语句是:

set GOARCH=amd64
set GOOS=linux
go build

编译成功完成,没有报错,但是把编译好的程序放到LINUX主机上却运行不了,我是直接在LINUX上用文件名test运行的,也不提示错误,但是也没打印出hello,我哪儿做错了吗?在WINDOWS下是没有什么问题的。

共 5 个回复


dxhdxh2k

linux上,GOARCH是不是amd64?

# 0

shook

@dxhdxh2k
我的LINUX是虚拟机,进去的时候显示:

Welcome to Ubuntu 14.04.3 LTS (GNU/Linux 3.19.0-42-generic x86_64)

应该是amd64的吧。

# 1

shook

我又配置了一个Linux的go环境,发现我直接在Linux下go run是正常的,但是go build之后还是运行不了呢!是不是我的执行命令有问题?截图如下:

# 2

heimeil

你运行的test是系统内建的,which test可以看见程序的路径,你运行的并不是当前目录下的test,当前目录下./test来运行

# 3

shook

@heimeil
太感谢了,确实是您说的问题,我的运行方式不对,而且上面交叉编译的问题也因为这个找到了原因,不是编译的问题,而是在Windows下编译的文件复制到Linux下没有运行权限,重新授权就解决了问题!

# 4