vagrant@precise64:/vagrant$ sudo ./myprogram
./myprogram: 1: ./myprogram: Syntax error: "(" unexpected
Run Code Online (Sandbox Code Playgroud)
我发现当我不从同一个操作系统生成二进制文件时会发生这种情况.我go build使用Mac OS,但我需要从使用Ubuntu Linux的Vagrant运行这个二进制文件.我应该使用什么命令而不是go buildMac,以便我可以在Vagrant环境中运行二进制程序?
注意:随着即将推出的Go 1.5(2015年第3季度),这将更容易.
请参阅" 在Go 1.5中交叉编译变得更好 "
(仍然来自Dave Cheney)
要成功进行交叉编译,您需要
- 目标平台的编译器,如果它们与您的主机平台不同,即您使用darwin/amd64(6g)并且您想要编译linux/arm(5g).
- 目标平台的标准库,其中包含在构建Go分发时生成的一些文件.
随着计划将Go编译器转换为Go在1.5版本中取得成果,第一个问题现在已经解决.
package main
import "fmt"
import "runtime"
func main() {
fmt.Printf("Hello %s/%s\n", runtime.GOOS, runtime.GOARCH)
}
Run Code Online (Sandbox Code Playgroud)
为达尔文建造/ 386
% env GOOS=darwin GOARCH=386 go build hello.go
# scp to darwin host
$ ./hello
Hello darwin/386
Run Code Online (Sandbox Code Playgroud)
或者为linux/arm构建
% env GOOS=linux GOARCH=arm GOARM=7 go build hello.go
# scp to linux host
$ ./hello
Hello linux/arm
Run Code Online (Sandbox Code Playgroud)