vagrant@precise64:/vagrant$ sudo ./myprogram
./myprogram: 1: ./myprogram: Syntax error: "(" unexpected
我发现当我不从同一个操作系统生成二进制文件时会发生这种情况。我在Mac OS上做go build
但是我需要从使用Ubuntu Linux的Vagrant运行这个二进制文件。我应该使用什么命令代替Mac中的go build
,以便我可以在Vagrant环境中运行二进制程序?
答案 0 :(得分:8)
注意:即将推出的Go 1.5(2015年第3季度),这将更容易。
参见" Cross compilation just got a whole lot better in Go 1.5"
(仍然来自Dave Cheney)
要成功进行交叉编译,您需要
- 目标平台的编译器,如果它们与您的主机平台不同,即您使用的是darwin / amd64(6g)并且您想要编译为linux / arm(5g)。
- 目标平台的标准库,其中包含在构建Go分发时生成的一些文件。
计划在1.5版本中翻译Go compiler into Go即将实现,第一个问题现已解决。
package main
import "fmt"
import "runtime"
func main() {
fmt.Printf("Hello %s/%s\n", runtime.GOOS, runtime.GOARCH)
}
为darwin / 386构建
% env GOOS=darwin GOARCH=386 go build hello.go
# scp to darwin host
$ ./hello
Hello darwin/386
或者为linux / arm构建
% env GOOS=linux GOARCH=arm GOARM=7 go build hello.go
# scp to linux host
$ ./hello
Hello linux/arm
答案 1 :(得分:1)
您需要设置交叉编译环境(通过自己构建go编译器)。 Dave Cheney的博客有很好的指示:http://dave.cheney.net/2013/07/09/an-introduction-to-cross-compilation-with-go-1-1