2014-04-29 1 views
2
[email protected]:/vagrant$ sudo ./myprogram 
./myprogram: 1: ./myprogram: Syntax error: "(" unexpected 

같은 OS에서 바이너리 파일을 생성하지 않으면 이런 현상이 발생합니다. 나는 go build을 Mac OS와 함께 사용하지만 우분투 리눅스를 사용하는 Vagrant에서이 바이너리를 실행해야한다. Mac에서 go build 대신 어떤 명령을 사용해야합니까? 그래서 Vagrant 환경에서 이진 프로그램을 실행할 수 있습니까?Mac에서 우분투 용 Go 프로그램을 크로스 컴파일하려면 어떻게해야합니까?

+1

그리고 다시 잊고 고려하시기 바랍니다 팔 당신이 Vagrant를 사용한다는 사실은 당신이 "네이티브"OS에서 * 외부 OS *를 실행할 수있게하는 수단 일 뿐이므로 손님 OS 나 그곳에서 실행되는 Go 프로그램과 아무런 관련이 없습니다. "우분투 Pompous Pterodactyl (amd64) 용 Ice Jaguar (x86)을 실행하는 Mac에서 Go 프로그램을 작성하려면 어떻게해야합니까?" - 그런 것. 방랑자는 이동 또는 컴파일 또는 실행중인 프로그램에 대해 아무것도 모릅니다. – kostix

답변

7

참고 : 곧 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) 
} 

빌드/386

% env GOOS=darwin GOARCH=386 go build hello.go 
# scp to darwin host 
$ ./hello 
Hello darwin/386 

또는 Linux 용 빌드/

% env GOOS=linux GOARCH=arm GOARM=7 go build hello.go 
# scp to linux host 
$ ./hello 
Hello linux/arm