Feeds:
文章
留言

Archive for 三月 24th, 2014

參考[1] 的文章,嘗試做了一遍確實可行… 以下是我的環境

環境
1. CentOS 5.9 (32Bits)
2. Go 1.1.1

步驟
1. 下載 http://go.googlecode.com/files/go1.2.1.linux-386.tar.gz
/home/arick/go/

2. 儲存以下腳本為 go-crosscompile-build 到 /home/arick/go/src
#!/bin/bash
# Copyright 2012 The Go Authors. All rights reserved.
# Use of this source code is governed by a BSD-style
# license that can be found in the LICENSE file.

# support functions for go cross compilation

type setopt >/dev/null 2>&1 && setopt shwordsplit
PLATFORMS="darwin/386 darwin/amd64 freebsd/386 freebsd/amd64 freebsd/arm linux/386 linux/amd64 linux/arm windows/386 windows/amd64″

function go-alias {
GOOS=${1%/*}
GOARCH=${1#*/}
eval “function go-${GOOS}-${GOARCH} { ( GOOS=${GOOS} GOARCH=${GOARCH} go \$@ ) }"
}

function go-crosscompile-build {
GOOS=${1%/*}
GOARCH=${1#*/}
cd $(go env GOROOT)/src ; GOOS=${GOOS} GOARCH=${GOARCH} ./make.bash –no-clean 2>&1
}

function go-crosscompile-build-all {
FAILURES=""
for PLATFORM in $PLATFORMS; do
CMD="go-crosscompile-build ${PLATFORM}"
echo “$CMD"
$CMD || FAILURES="$FAILURES $PLATFORM"
done
if [ “$FAILURES" != “" ]; then
echo “*** go-crosscompile-build-all FAILED on $FAILURES ***"
return 1
fi
}

function go-all {
FAILURES=""
for PLATFORM in $PLATFORMS; do
GOOS=${PLATFORM%/*}
GOARCH=${PLATFORM#*/}
CMD="go-${GOOS}-${GOARCH} $@"
echo “$CMD"
$CMD || FAILURES="$FAILURES $PLATFORM"
done
if [ “$FAILURES" != “" ]; then
echo “*** go-all FAILED on $FAILURES ***"
return 1
fi
}

function go-build-all {
FAILURES=""
for PLATFORM in $PLATFORMS; do
GOOS=${PLATFORM%/*}
GOARCH=${PLATFORM#*/}
OUTPUT=`echo $@ | sed ‘s/\.go//’`
CMD="go-${GOOS}-${GOARCH} build -o $OUTPUT-${GOOS}-${GOARCH} $@"
echo “$CMD"
$CMD || FAILURES="$FAILURES $PLATFORM"
done
if [ “$FAILURES" != “" ]; then
echo “*** go-build-all FAILED on $FAILURES ***"
return 1
fi
}

#for PLATFORM in $PLATFORMS; do
# go-alias $PLATFORM
#done
go-crosscompile-build-all
unset -f go-alias

3. /home/arick/go/src 執行 bash go-crosscompile-build
輸出 /usr/local/go

/usr/local/go/pkg 應該會有各種 target

20140324-02

4. 編譯 Windows 386
export GOOS=windows
export GOARCH=386
go build -o test-win-x86.exe test.go

20140324-03

5. 編譯 Android (ARMv7)
export GOARCH=arm
export GOOS=linux
export GOARM=7

go build -o test-armv7 test.go

# 上傳到 Android 測試

adb push test-armv7 /data/local/tmp

chmod 755 /data/local/tmp/test-armv7

/data/local/tmp/test-armv7

20140324-01

 

補充 test.go

package main
import (
“fmt"
)

func main(){
fmt.Print(“Hello World\n");
}

參考資料
[1] http://dave.cheney.net/2013/07/09/an-introduction-to-cross-compilation-with-go-1-1

Read Full Post »