Linux上构筑iPhone OS3.1.2开发环境
创始人
2024-07-31 05:40:21
0

开发iPhone应用程序标准的环境配置是基于intel Mac的。虽说现在Mac很便宜,但是仍然大部分人仍然在用windows和linux系统,今天就介绍一下在linux上建立iPhone开发系统。这里采用最新的SDK版本3.1.2。这回主要介绍linux下的安装,配置方法,windows(Cygwin)的配置可以参考这里。

我的HOST机器环境如下:

  1. uname -a  
  2. Linux localhost.localdomain 2.6.18-1.2798.fc6 #1 SMP Mon Oct 16 14:54:20 [/pre]  
  3. EDT 2006 i686 i686 i386 GNU/Linux  
  4. gcc -v  
  5. Using built-in specs.  
  6. Target: i386-redhat-linux  
  7. config option: ../configure --prefix=/usr --mandir=/usr/share/man [/pre]  
  8.             --infodir=/usr/share/info --enable-shared --enable-threads=posix [/pre]  
  9.             --enable-checking=release --with-system-zlib --enable-__cxa_atexit [/pre]  
  10.             --disable-libunwind-exceptions --enable-libgcj-multifile [/pre]  
  11.             --enable-languages=c,c++,objc,obj-c++,java,fortran,ada --enable-java-awt=gtk [/pre]  
  12.             --disable-dssi [/pre]  
  13.             --enable-plugin --with-java-home=/usr/lib/jvm/java-1.4.2-gcj-1.4.2.0/jre [/pre]  
  14.             --with-cpu=generic --host=i386-redhat-linux  
  15. thread model: posix  
  16. gcc version 4.1.2 20070626 (Red Hat 4.1.2-13) 

需要准备的:

  1. 3.1.2用restore file iPhone1,2_3.1.2_7D11_Restore.ipsw  
  2. iPhone3.1.2 SDK iphone_sdk_3.1.2_with_xcode_3.1.4__leopard__9m2809.dmg 

许多网站都介绍过了,这里也使用 toolchain 来建立环境。参考 iphonedevonlinux 。

  1. checkout toolchain $ mkdir ~/toolchain  
  2. cd ~/toolchain  
  3. svn checkout [url]http://iphonedevonlinux.googlecode.com/svn/trunk/[/url] ./  
  4. 拷贝SDK,firmware文件  
  5. mkdir -p files/firmware  
  6. mv ./iphone_sdk_3.1.2_with_xcode_3.1.4__leopard__9m2809.dmg ./files/  
  7. mv ./iPhone1,2_3.1.2_7D11_Restore.ipsw ./files/firmware/ 

更新的toolchain已经对应3.1.2版本的SDK了,所以大家不用再给他打补丁了。

[blockquote]

如果遇到"We need the decryption key for 018-6028-014.dmg."的问题,可以将toolchain.sh中的

DECRYPTION_KEY_SYSTEM=$.....    

替换为 DECRYPTION_KEY_SYSTEM=
 

"a8a886d56011d2d98b190d0a498f6fcac719467047639cd601fd53a4a1d93c24e1b2ddc6"

[/blockquote]

因为checkout 下来的toolchain是针对3.0版本的,直接不能使用,所以需要打个补丁。
这里下载补丁,然后在toolchain目录下: 

  1. patch < toolchain.sh.patch 
  2. chmod u+x toolchain.sh 

安装/编译

本来执行 ./toolchain.sh all 后会全部给安装和编译的,但是实际上有很多问题,所以我们还是一步一步地来。

第一步没有什么问题

./toolchain.sh headers

第二步也顺利通过

./toolchain.sh firmware

第三步也挺顺利

./toolchain.sh darwin_sources

最后一步,这一步需要注意了

./toolchain.sh build

执行最后一步编译gcc-4.2-iphone,在链接的时候会出现以下的错误: ld: library not found for -lc

  1. collect2: ld returned 1 exit status  
  2. make[3]: *** [libgcc_s.dylib] error 1  
  3. ....  
  4. make[2]: *** [stmp-multilib] error 2  
  5. rm gcov.pod fsf-funding.pod gfdl.pod gpl.pod cpp.pod gcc.pod  
  6. ....  
  7. make[1]: *** [all-gcc] error 2  
  8. make[1]:leaving dir `/home/xxx/toolchain/toolchain/bld/gcc-4.2-iphone'  
  9. make: *** [all] error 2 

解决它很简单,在toolchain目录下执行:

  1. cp ./sdks/iPhoneOS3.1.2.sdk/usr/lib/libSystem.B.dylib [/pre]  
  2. ./toolchain/bld/gcc-4.2-iphone/gcc/libc.dylib[/pre] 

接下来在执行一次 ./toolchain.sh build 就可以了。最后出现下面的画面就是成功了。

  1. It seems like the toolchain built![/pre] 

最后你可以执行 ./toolchain.sh clean 删除编译过程中的文件和 SDK 等文件,你也可以不这么做。
测试

#p#

接下来,借可以先试试 toolchain/apps/ 下面的测试代码 HelloToolchain。

编译的过程中可能出现的问题有以下几个:

1. 找不到编译器文件 arm-apple-darwin9-gcc

如果直接在HelloToolchain目录下 make。很可能提示,没有 arm-apple-darwin9-gcc 等命令。

这是因为没有设置编译器路径的原因。将下面的语句放入 /etc/profile 内(针对所有用户),

或者 .bash_profile 文件中就可以了。

  1. export PATH=/home/xxx/toolchain/toolchain/pre/binPATH 

2. 编译过程中提示Frameworks,或头文件找不到

  1. Classes/ClockAppDelegate.m:10:38: error:   
  2. AVFoundation/AVFoundation.h: no such file or directory  
  3. make: *** [Classes/ClockAppDelegate.o] Error 1 

或者是连接的时候提示:

  1. ld: library not found for -lobjc  
  2. collect2: ld returned 1 exit status  
  3. make: HelloWorldFirst? Error 1[/pre] 

首先检查你的makefile文件是否配置好了库文件和头文件路径,比如像是以下的设置: # iPhone SDK path

  1. IPHONESDK = /home/xxx/toolchain/toolchain/sys  
  2. include path (SDK)  
  3. INCPATH += -I"$(IPHONESDK)/usr/include"  
  4. include path (gcc)  
  5. INCPATH += -I"$(IPHONESDK)/usr/include/gcc/darwin/4.2"  
  6. CFLAGS  += $(INCPATH) \  
  7. ...  
  8. LDFLAGS += -L"$(IPHONESDK)/usr/lib"  
  9. LDFLAGS += -F"$(IPHONESDK)/System/Library/Frameworks"  
  10. LDFLAGS += -F"$(IPHONESDK)/System/Library/PrivateFrameworks"  
  11. CFLAGS += -F"$(IPHONESDK)/System/Library/Frameworks"  
  12. CFLAGS += -F"$(IPHONESDK)/System/Library/PrivateFrameworks" 

如果还是不行,下面有两个方法让你得到最新(3.1.2)的版本库和头文件:

方法1

在这里下载dyldcache,用scp等工具将其传送到iPhone上,然后执行:

iPhone$ ./dyldcache /System/Library/Caches/com.apple.

dyld/dyld_shared_cache_armv6

大概解压后有4GB左右的文件,请注意iPhone剩余的容量大小。

解压完毕后将 ./out 目录下的文件拷贝到linux上的./toolchain/sys/usr/lib 目录下。

方法2

如果你还没有iPhone设备,那么可以按照以下的方法由sdk文件中提取库文件。

1. 在这里下载HFSExplorer工具。(windows下使用)

2. 用HFSExplorer打开SDK文件(.dmg文件),

在Packages目录下将iPhoneSDKHeadersAndLibs.pkg文件解压到某一目录下。

然后拷贝到linux下,比如这里拷贝到/tmp下。

3. 执行以下命令,加压该数据包:

  1. cd /tmp  
  2. xar -xf iPhoneSDKHeadersAndLibs.pkg Payload  
  3. zcat Payload | cpio -i 

完成之后,在/tmp目录下会生成几个子目录,这里我们需要的是Platforms目录下的东东。

将 ./Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.1.2.sdk 目录与其子目录拷贝到toolchain的sdks目录下就可以了。

 

  1. cp -rp ./Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.1.2.sdk [/pre]  
  2. /home/xxx/toolchain/sdks/ 

注意 toolchain/sdks/ 目录下已经有 iPhoneOS3.1.2.sdk 目录了,完整覆盖它。

通过以上修改后,刚才的 makefile 中的SDK路径需要修改一下,像是下面的样子。

  1. #iPhone SDK path  
  2. IPHONESDK = /home/xxx/toolchain/sdks/iPhoneOS3.1.2.sdk 

接下来,可以编译一下自己的程序,上机测试了。别忘了用ldid签名哦!

【编辑推荐】

浏览器中使用“Linux 操作系统”

iPhone OS 3.0正式发布 界面功能大揭秘

红旗Linux将基于MeeGo 1.2开发平板系统

Perf Event :Linux下的系统性能调优工具

Linux内核进入3.0 RC1 Linus说只是变个数字

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
着眼MAC地址,解救无法享受D... 在安装了DHCP服务器的局域网环境中,每一台工作站在上网之前,都要先从DHCP服务器那里享受到地址动...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...