本教程基于iPad4 WiFi版iOS 10.3.3测试,理论上同样使用苹果末代32位处理器的iPhone5、iPhone5c通用。其他型号苹果设备也可一试。
一、 准备工作
1、 一台正常使用的iPad4,要求越狱(通过h3lix),尽量是全新越狱的设备,避免由于添加软件源不当导致软件包冲突。也可以通过coolbooter插件在双系统中安装gcc。
2、 在cydia中添加如下插件
Apple File Conduit “2” (Cydia/Telesphoreo 俗称afc2)
AppSync Unified (源: http://cydia.angelxwind.net/)
Filza File 文件管理器 (源: http://apt.abcydia.com/)
NewTerm 2 手机终端 (源: http://apt.cydiaba.cn/)
[终端也可以用 Mterminal (Bigboss)]
OpenSSH (Cydia/Telesphoreo)
APT 0.6 Transitional (Cydia/Telesphoreo)
以上插件不一定全部用得到,但是遇到问题时会有很大用处。
二、 搭建gcc编译环境
1、 熟悉NewTerm 2终端环境
从桌面打开NewTerm,看到熟悉的unix终端界面,不禁老泪纵横,输入su获取root权限。苹果默认密码alpine。可输入指令passwd并连续两次输入新密码来更改密码。以下各步骤需要在root中进行。
2、 安装wget
终端键入指令
apt-get update
apt-get install wget
3、 安装libgcc
wget http://apt.saurik.com/debs/libgcc_4.2-20080410-1-6_iphoneos-arm.deb
dpkg -i libgcc_4.2-20080410-1-6_iphoneos-arm.deb
4、 安装gcc
apt-get install iphone-gcc
5、 获取gcc所需头文件和库并安装(以下网址可能需要借助科学技术。如果ipad不能使用科学技术但是能够获得文件的,可以参考5-2)
5-1 直接通过命令安装
wget http://www.syshalt.net/iphone/gcc-iphone/sdk-2.0-headers.tar.gz
tar -xvzf sdk-2.0-headers.tar.gz
cd include-2.0-sdk-ready-for-iphone
cp -r * /usr/include
cd ..
wget http://www.syshalt.net/iphone/gcc-iphone/gcc_files.tar.gz
tar -xvzf gcc_files.tar.gz
cd gcc_files
cp -r * /usr/lib
*5-2 获取软件包后手动安装
通过filza file文件管理器,并参照5-1中的指令(看不懂指令百度)手动操作,不赘述。
5-3 磁盘空间不足
可以尝试将/usr/include/文件夹整体移动到/User/Stash文件夹中,并在/usr处建立快捷链接。
6、 安装常用命令和库
apt-get install ldid
apt-get install make
apt-get install vim
apt-get install curl
apt-get install sqlite3
7、 安装sed
至第6步理论上编译环境已经安装完成,但由于gcc版本较老,无法直接在A6处理器上直接运行,需要一些调教。
apt-get install sed
8、 用sed将gcc执行文件转换为A6支持的文件
cd /usr/bin
sed -i'' 's/\x00\x30\x93\xe4/\x00\x30\x93\xe5/g;s/\x00\x30\xd3\xe4/\x00\x30\xd3\xe5/g;' gcc
sed -i'' 's/\x00\x30\x93\xe4/\x00\x30\x93\xe5/g;s/\x00\x30\xd3\xe4/\x00\x30\xd3\xe5/g;' arm-apple-darwin9-gcc
sed -i'' 's/\x00\x30\x93\xe4/\x00\x30\x93\xe5/g;s/\x00\x30\xd3\xe4/\x00\x30\xd3\xe5/g;' arm-apple-darwin9-gcc-4.2.1
ldid -s gcc
ldid -s arm-apple-darwin9-gcc
ldid -s arm-apple-darwin9-gcc-4.2.1
cd /usr/libexec/gcc/arm-apple-darwin9/4.2.1
sed -i'' 's/\x00\x30\x93\xe4/\x00\x30\x93\xe5/g;s/\x00\x30\xd3\xe4/\x00\x30\xd3\xe5/g;' collect2
sed -i'' 's/\x00\x30\x93\xe4/\x00\x30\x93\xe5/g;s/\x00\x30\xd3\xe4/\x00\x30\xd3\xe5/g;' cc1plus
sed -i'' 's/\x00\x30\x93\xe4/\x00\x30\x93\xe5/g;s/\x00\x30\xd3\xe4/\x00\x30\xd3\xe5/g;' cc1objplus
sed -i'' 's/\x00\x30\x93\xe4/\x00\x30\x93\xe5/g;s/\x00\x30\xd3\xe4/\x00\x30\xd3\xe5/g;' cc1obj
sed -i'' 's/\x00\x30\x93\xe4/\x00\x30\x93\xe5/g;s/\x00\x30\xd3\xe4/\x00\x30\xd3\xe5/g;' cc1
ldid -s collect2
ldid -s cc1plus
ldid -s cc1objplus
ldid -s cc1obj
ldid -s cc1
三、 gcc编译环境的善尾工作
至步骤二-8,gcc已经可以正常运行。
编译c文件也可以正常通过产生a.out,但是a.out无法正常运行,出现了和步骤二-7一样的报错,这里就需要转换a.out文件。
sed -i'' 's/\x00\x30\x93\xe4/\x00\x30\x93\xe5/g;s/\x00\x30\xd3\xe4/\x00\x30\xd3\xe5/g;' a.out
ldid -S a.out
之后就可以顺利运行了。每次编译都需要对a.out文件处理。