(1)首先进入go/src 源码所在目录,执行如下命令创建目标平台所需的包和工具文件。
$ cd /usr/local/go/src
$ CGO_ENABLED=0 GOOS=linux GOARCH=amd64 ./make.bash
如果是 Windows 则修改 GOOS 即可。
$ CGO_ENABLED=0 GOOS=windows GOARCH=amd64 ./make.bash
(2) 现在可以编译 Linux 和 Windows 平台所需的执行文件了。
$ CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build
$ CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build
不过该方式暂时不支持 CGO。
[http://solovyov.net/en/2012/03/09/cross-compiling-go/](http://solovyov.net/en/2012/03/09/cross-compiling-go/)
以上假定是64位架构,32位,修改GOARCH为386
说明:
这里并不是重新编译Go,因为安装Go的时候,只是编译了本地系统需要的东西;而需要跨平台交叉编译,需要在Go中增加对其他平台的支持。所以,有 ./make.bash 这么一个过程
交叉编译问题补充:
首先,建议安装Go语言通过源码安装,否则可能没有make.bash或make.bat程序。
之所以需要执行上面的这些步骤,是因为安装Go语言时,一些工具和平台相关的代码并没有生成,执行上面的步骤,并不是重新安装Go语言,而是生成交叉编译(目标平台)需要的工具和文件。这些只是在第一次交叉编译的时候做。之后就不需要了。
为了更快的编译,可以
./make.bash --no-clean
我用的是Mac,通过gvm来管理go版本。我需要编译一个应用放到linux32位系统上面。
```
cd ~/.gvm/gos/go1.1.2/src
CGO_ENABLED=0 GOOS=linux GOARCH=386 ./make.bash
```
这样以后,"CGO_ENABLED=0 GOOS=linux GOARCH=386 go install"编译linux32的应用没有问题了。但是如果不带参数 CGO ... GOOS ... GOARCH 编译本地平台应用就要报错。
```
# runtime/cgo
clang: warning: argument unused during compilation: '-pthread'
# runtime/cgo
clang: error: no such file or directory: 'libgcc.a'
```
#7
更多评论