前言
在 Linux 机器中编译可在 iOS 设备上运行的Go语言程序,是不是感觉很奇妙?
本文以 Ubuntu 系统为例,其他操作系统未测试
首先你得在你的 Linux 机器上编译安装 iOS 工具链
我最近写了一篇教程,解决 iOS 工具链的安装问题,在 Ubuntu 中编译安装 iOS 工具链 (ios-toolchain)
如果按照这篇教程去做,会在 /usr/local 目录得到两个子目录/usr/local/ios-ndk-armv7
/usr/local/ios-ndk-arm64
将子目录中的 bin 目录加入 PATH
1 | export PATH=$PATH:/usr/local/ios-ndk-armv7/bin:/usr/local/ios-ndk-arm64/bin |
安装配置 golang
1. 使用 apt-get 安装 golang
1 | sudo apt-get update |
更改 go 的所有者和用户组,为接下来的操作方便
1 | sudo chown -R yourUser:yourGroup /usr/lib/go* |
2. golang官网下载安装
我建议去golang官网下载安装,以go1.8.3为例,golang 将会安装到 /usr/local
1 | wget --no-check-certificate https://storage.googleapis.com/golang/go1.8.3.linux-amd64.tar.gz |
更改 go 的所有者和用户组,为接下来的操作方便
1 | sudo chown -R yourUser:yourGroup /usr/local/go* |
将 $GOROOT/bin 加入 PATH
1 | export PATH=$PATH:/usr/local/go/bin |
编译 iOS Go语言程序
先 clone 我的 example
1 | git clone https://github.com/iikira/Hello-World |
编译 iOS armv7 (darwin/arm) / arm64 (darwin/arm64) 程序
用 go install 安装 iOS std
1 | iOS armv7 (darwin/arm): |
如果前面没有修改 golang 安装目录的所有者,go install 可能会报错
运行成功,会输出以下内容(好吧看不懂)
1 | runtime/cgo |
尝试编译 example
arm 编译命令:
1 | CC=arm-apple-darwin11-clang GOOS=darwin GOARCH=arm GOARM=7 CGO_ENABLED=1 go build -o hello_world_ios_arm |
arm64 编译命令:
1 | CC=aarch64-apple-darwin11-clang GOOS=darwin GOARCH=arm64 CGO_ENABLED=1 go build -o hello_world_ios_arm64 |
不出意外的话,很快就编译成功
用 file 命令查看生成 iOS 程序的详细类型
1 | apple@ubuntu:~/Hello-World$ file hello_world_ios_* |
亟待完美解决
以上编译出的程序在运行时,会在开头返回一个错误
1 | runtime/cgo: no Info.plist URL |
实际上, 此错误不会对程序运行造成多大影响,可以忽略,如果想要去除错误,只需在程序所在目录下放置一个名为 Info.plist 的有效文件即可.