goios
Posted zJanly
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了goios相关的知识,希望对你有一定的参考价值。
Golang 支持的平台非常多, 运行go tool dist list
查看已支持的所有平台
appledeimac:Hello-World apple$ go version
go version go1.8.3 darwin/amd64
appledeimac:Hello-World apple$ go tool dist list
android/386
android/amd64
android/arm
android/arm64
darwin/386
darwin/amd64
darwin/arm
darwin/arm64
dragonfly/amd64
freebsd/386
freebsd/amd64
freebsd/arm
linux/386
linux/amd64
linux/arm
linux/arm64
linux/mips
linux/mips64
linux/mips64le
linux/mipsle
linux/ppc64
linux/ppc64le
linux/s390x
nacl/386
nacl/amd64p32
nacl/arm
netbsd/386
netbsd/amd64
netbsd/arm
openbsd/386
openbsd/amd64
openbsd/arm
plan9/386
plan9/amd64
plan9/arm
solaris/amd64
windows/386
windows/amd64
|
编译可在苹果ios设备上运行的Go语言程序(需要安装 Xcode)
iOS 系统内核为 darwin,CPU架构为ARM。
ARM处理器,因其功耗低和尺寸小而闻名,几乎所有的手机处理器都基于ARM,苹果当然也不例外。
arm(32位元),arm64(64位元)
arm64设备:iPhone 5s 及以上、iPad Air 及以上
arm设备:iPhone 5s 以下,iPad 4 及以下
可以看到,Golang版本为1.8.3,支持以下两个平台
说明这个版本的Golang是支持iOS的
但是不能像编译 windows,linux 程序那样编译iOS程序,否则可能会编译报错,或者编译出的程序不能正常运行.
使用go env
查看go的环境变量
appledeimac:Hello-World apple$ go env
GOARCH=”amd64″
GOBIN=””
GOEXE=””
GOHOSTARCH=”amd64″
GOHOSTOS=”darwin”
GOOS=”darwin”
GOPATH=”/Volumes/KINSTON/Golang”
GORACE=””
GOROOT=”/usr/local/go”
GOTOOLDIR=”/usr/local/go/pkg/tool/darwin_amd64″
GCCGO=”gccgo”
CC=”/Users/apple/my/bin/aarch64-linux-android-4.9/bin/aarch64-linux-android-gcc”
GOGCCFLAGS=”-fPIC -m64 -pthread -fmessage-length=0 -fno-common”
CXX=”clang++”
CGO_ENABLED=”1″
PKG_CONFIG=”pkg-config”
CGO_CFLAGS=”-g -O2″
CGO_CPPFLAGS=””
CGO_CXXFLAGS=”-g -O2″
CGO_FFLAGS=”-g -O2″
CGO_LDFLAGS=”-g -O2″
|
可以看到 CC的值为 /Users/apple/my/bin/aarch64-linux-android-4.9/bin/aarch64-linux-android-gcc
,这里要将CC设为$GOROOT/misc/ios/clangwrap.sh
$GOROOT 为 Golang 默认的安装目录,在 OS X 为 /usr/local/go
, 在Windows系统为C:Go
此外还要将 CGO_ENABLED 设为 1 ,否则可能会编译报错,或者编译出的程序不能正常运行
所以,编译 darwin/arm64 的 example 命令就是:
不出意外的话,编译成功,可执行二进制程序在该目录生成。使用file
命令查看文件类型
接下来给程序签名,否则程序在iOS设备运行时可能会返回Killed: 9
错误
使用 ldid -S
为程序签名
如果没有安装 ldid , 先安装 Homebrew,用 brew 命令安装 ldid
输入 ldid 验证是否安装成功
appledeimac:~ apple$ ldid
usage: ldid -S[entitlements.xml] <binary>
ldid -e MobileSafari
ldid -S cat
ldid -Stfp.xml gdb
|
编译 darwin/arm 的 example 命令是:
编译时可能会报错找不到crt1.3.1.o
,这是因为高版本的 Xcode 已经去掉了这个文件,有以下解决方案
- 访问苹果官网下载低版本的Xcode
提取低版本Xcode的crt1.3.1.o
,路径大致为/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/lib/crt1.3.1.o
- 使用现成步骤1提取出的 crt1.3.1.o
下载地址
将文件放入/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/lib/
目录中
使用file
命令查看文件类型
亟待完美解决
以上编译出的程序在运行时,会在开头返回一个错误
runtime/cgo: no Info.plist URL
|
实际上, 此错误不会对程序运行造成多大影响,可以忽略,如果想要去除错误,只需在程序所在目录下放置一个名为 Info.plist 的有效文件即可.
以上是关于goios的主要内容,如果未能解决你的问题,请参考以下文章