LiteIDE 通过使用环境配置文件来支持 go 语言的交叉编译,对于 windows 和 linux 下相对简单,对于 macOS 可能会复杂一些,
本文以 macOS 交叉编译 windows-386 可执行文件为例,简要介绍如何在 LiteIDE 中配置和实现交叉编译功能。

交叉编译环境选择和配置

首先选择环境,在工具栏环境选择中选择 cross-win32 切换至 windows-386 交对编译环境,我们点击工具栏上的 编辑当前环境 按钮,对当前使用的环境即 cross-win32.env 文件进行编辑,默认设置如下:

  1. GOROOT=$HOME/go
  2. #GOBIN=
  3. GOARCH=386
  4. GOOS=windows
  5. CGO_ENABLED=0
  6. PATH=$GOROOT/bin:$PATH
  7. LITEIDE_GDB=/usr/local/bin/gdb
  8. LITEIDE_MAKE=make
  9. LITEIDE_TERM=/usr/bin/open
  10. LITEIDE_TERMARGS=-a Terminal
  11. LITEIDE_EXEC=/usr/X11R6/bin/xterm
  12. LITEIDE_EXECOPT=-e

我们可以看到 GOARCH 和 GOOS 已经设置完毕,我们需要更改的是 GOROOT 和 PATH 变量,主要设置方式有两种,

第一种方式,不设置 GOROOT 直接设置 PATH

这种方式中,我们不设置 GOROOT 变量,而是通过 PATH 设置让 LiteIDE 在内部使用 go env 自动查询 GOROOT,设置如下

  1. #GOROOT=$HOME/go
  2. #GOBIN=
  3. GOARCH=386
  4. GOOS=windows
  5. CGO_ENABLED=0
  6. PATH=$PATH:/usr/local/bin
  7. LITEIDE_GDB=/usr/local/bin/gdb
  8. LITEIDE_MAKE=make
  9. LITEIDE_TERM=/usr/bin/open
  10. LITEIDE_TERMARGS=-a Terminal
  11. LITEIDE_EXEC=/usr/X11R6/bin/xterm
  12. LITEIDE_EXECOPT=-e

第二种方式,直接设置 GOPATH 值

这种方式是直接设置 GOROOT,可以通过在终端下输入 go env 来查询 GOROOT 位置,如果是使用官方安装,
可能显示为

  1. GOROOT="/usr/local/go"

如果是使用 brew install go 安装,则可能显示为

  1. GOROOT="/usr/local/Cellar/go/1.8/libexec"

对于官方安装,我们编辑 cross-win32 环境对应为

  1. GOROOT=/usr/local/go
  2. #GOBIN=
  3. GOARCH=386
  4. GOOS=windows
  5. CGO_ENABLED=0
  6. PATH=$GOROOT/bin:$PATH
  7. LITEIDE_GDB=/usr/local/bin/gdb
  8. LITEIDE_MAKE=make
  9. LITEIDE_TERM=/usr/bin/open
  10. LITEIDE_TERMARGS=-a Terminal
  11. LITEIDE_EXEC=/usr/X11R6/bin/xterm
  12. LITEIDE_EXECOPT=-e

对于 brew 安装,我们编辑 cross-win32 环境对应为

  1. GOROOT=/usr/local/Cellar/go/1.8/libexec
  2. #GOBIN=
  3. GOARCH=386
  4. GOOS=windows
  5. CGO_ENABLED=0
  6. PATH=$GOROOT/bin:$PATH
  7. LITEIDE_GDB=/usr/local/bin/gdb
  8. LITEIDE_MAKE=make
  9. LITEIDE_TERM=/usr/bin/open
  10. LITEIDE_TERMARGS=-a Terminal
  11. LITEIDE_EXEC=/usr/X11R6/bin/xterm
  12. LITEIDE_EXECOPT=-e

保存环境并通过 go env 查看

保存cross-win32.env 后,LiteIDE 自动重新加载 cross-win32 环境,打开编译输出窗口可以看到类似如下输出

  1. /usr/local/go/bin/go env []
  2. GOARCH="386"
  3. GOBIN=""
  4. GOEXE=".exe"
  5. GOHOSTARCH="amd64"
  6. GOHOSTOS="darwin"
  7. GOOS="windows"
  8. GOPATH="/Users/vfc/goproj"
  9. GORACE=""
  10. GOROOT="/usr/local/go"
  11. GOTOOLDIR="/usr/local/go/pkg/tool/darwin_amd64"
  12. GCCGO="gccgo"
  13. GO386=""
  14. CC="clang"
  15. GOGCCFLAGS="-m32 -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/2b/fhf209x571lgp5dljz593q040000gn/T/go-build420337682=/tmp/go-build -gno-record-gcc-switches"
  16. CXX="clang++"
  17. CGO_ENABLED="0"
  18. PKG_CONFIG="pkg-config"
  19. CGO_CFLAGS="-g -O2"
  20. CGO_CPPFLAGS=""
  21. CGO_CXXFLAGS="-g -O2"
  22. CGO_FFLAGS="-g -O2"
  23. CGO_LDFLAGS="-g -O2"

注:以上环境信息也可以调用菜单 查看 - 执行文件 (快捷键为 Command+` )功能的输入窗口中输入 go env 来查看。

交叉编译时提示没有权限的处理方法

在 cross-win32环境下,我们打开项目中的 go 源码文件,使用工具栏上的 编译 命令或者在 执行文件 中输入 go build 进行编译测试。
如果是使用 brew 安装,这时候就可以编译成功,如果使用 go 安装,有可能会出现以下提示

  1. go install runtime/internal/sys: mkdir /usr/local/go/pkg/windows_386: permission denied

出现这个错误则说明 LiteIDE 没有 /usr/local/go 路径的写权限,遇到这种情况,我们需要在终端下先交叉编译好 go 环境。在终端下输入

  1. $ sudo GOOS=windows GOARCH=386 go install std

这里的 go install std 表示编译安装标准库,安装结束后,我们在 LiteIDE 中就可以正常使用 windows-386 交叉编译环境了。
对于其他交叉编译环境,需要时可以做同样的处理。


原文:http://liteide.org/blog/LiteIDE-%E7%9A%84%E4%BA%A4%E5%8F%89%E7%BC%96%E8%AF%91%E8%AE%BE%E7%BD%AE/