在 Linux 机器中编译可在 iOS 设备上运行的 Go 语言程序,是不是感觉很奇妙?
本文以 Ubuntu 系统为例,其他操作系统未测试
首先你得在你的 Linux 机器上编译安装 iOS 工具链
我最近写了一篇教程,解决 iOS 工具链的安装问题,在 Ubuntu 中编译安装 iOS 工具链 (ios-toolchain)
/usr/local/ios-ndk-armv7/usr/local/ios-ndk-arm64
1
export PATH=$PATH:/usr/local/ios-ndk-armv7/bin:/usr/local/ios-ndk-arm64/bin安装配置 golang
1. 使用 apt-get 安装 golang
12
sudo apt-get updatesudo apt-get install golang
更改 go 的所有者和用户组,为接下来的操作方便
1
sudo chown -R yourUser:yourGroup /usr/lib/go*
2. golang 官网下载安装
我建议去 golang 官网下载安装,以 go1.8.3 为例,golang 将会安装到 /usr/local
12
wget --no-check-certificate https://storage.googleapis.com/golang/go1.8.3.linux-amd64.tar.gz sudo tar zxf go1.8.3.linux-amd64.tar.gz /usr/local
更改 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
12
编译 iOS armv7 (darwin/arm) / arm64 (darwin/arm64) 程序
用 go install 安装 iOS std
12345
# iOS armv7 (darwin/arm):CC=arm-apple-darwin11-clang GOOS=darwin GOARCH=arm GOARM=7 CGO_ENABLED=1 go install -tags ios std# iOS arm64 (darwin/arm64):CC=aarch64-apple-darwin11-clang GOOS=darwin GOARCH=arm64 CGO_ENABLED=1 go install -tags ios std
如果前面没有修改 golang 安装目录的所有者,go install 可能会报错
运行成功,会输出以下内容(好吧看不懂)
12345678
# runtime/cgoldid.cpp(602): _assert(): Swap(mach_header_->filetype) == MH_EXECUTE || Swap(mach_header_->filetype) == MH_DYLIB || Swap(mach_header_->filetype) == MH_BUNDLE# netldid.cpp(602): _assert(): Swap(mach_header_->filetype) == MH_EXECUTE || Swap(mach_header_->filetype) == MH_DYLIB || Swap(mach_header_->filetype) == MH_BUNDLE# os/userldid.cpp(602): _assert(): Swap(mach_header_->filetype) == MH_EXECUTE || Swap(mach_header_->filetype) == MH_DYLIB || Swap(mach_header_->filetype) == MH_BUNDLE# pluginldid.cpp(602): _assert(): Swap(mach_header_->filetype) == MH_EXECUTE || Swap(mach_header_->filetype) == MH_DYLIB || Swap(mach_header_->filetype) == MH_BUNDLE
尝试编译 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 程序的详细类型
123
apple@ubuntu:~/Hello-World$ file hello_world_ios_*hello_world_ios_arm: Mach-O arm_v7 executablehello_world_ios_arm64: Mach-O 64-bit 64-bit architecture=12 executable亟待完美解决
以上编译出的程序在运行时,会在开头返回一个错误
1
runtime/cgo: no Info.plist URL
实际上, 此错误不会对程序运行造成多大影响,可以忽略,如果想要去除错误,只需在程序所在目录下放置一个名为 Info.plist 的有效文件即可.