仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 3256|回复: 18
打印 上一主题 下一主题

[学习教程] IOS制作之iOS 系列译文:Mach-O 可实行文件仓酷云

[复制链接]
兰色精灵 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:37:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
你可能还需要学习使用Xcode这个开发环境,接著你需要掏钱向苹果注册开发者权限,基本的帐号是99美金。本视频为“斯坦福大学iPhone开发教程”,51CTO将不断关注本视频教程的更新进度,为大家提供最新的视频。当我们在Xcode中构建一个程序的时分,个中有一部分就是把源文件(.m和.h)文件变化成可实行文件。这个可实行文件包括了将会在CPU(iOS设备上的arm处置器大概你mac上的Intel处置器)运转的字节码。
我们将会过一遍编译器这个历程的做了些甚么,同时也看一下可实行文件的外部究竟是如何的。实在,内里的工具比你看到的要多良多。
让我们先把Xcode放一边,踏进Commond-Lines的年夜陆。当我们在Xcode中构建一个App时,Xcode只是复杂的挪用了一系列的工具罢了。但愿这将会让你更好的分明一个可实行文件(被称之为Mach-O可实行文件),是如何组装起来的,而且是如何在iOS大概osx上实行的
XCrun

先从一些基本性的工具入手下手:我们将会利用一个叫做Xcrun的命令行工具。他看起来很奇异,可是切实其实相称杰出。这个小工具是用来挪用其他工具的。本来的时分我们实行:
1
%clang-v

如今在终端中,我们能够实行:
1
%xcrunclang-v

Xcrun定位Clang,而且利用相干的参数来实行Clang。
为何我们要做这个事变?这看起来毫无重点,胡扯八道。可是Xcrun同意我们利用多个版本的Xcode,大概利用特定Xcode版本内里的工具,大概针对特性的SDK利用分歧的工具。假如你刚好有Xcode4.5和xcode5、利用xcode-select和xcrun你能够选择选择利用来自Xcode4.5内里的SDK的工具,大概来自Xcode5内里的SDK的工具。在年夜多半其他平台上,这将是一个不成能的事变。假如你看一下匡助手册上xcode-select和xcrun的一些细节。你就可以在不安装命令行工具的情形下,利用在终端中利用开辟者工具。
一个不利用IDE的HelloWorld

回到终端,创立一个包括一个c文件的目次:
1
2
3
%mkdir~/Desktop/objcio-command-line
%cd!$
%touchhelloworld.c

如今利用你喜好的文本编纂器来编纂这个文件,比方TextEdit.app:
1
%open-ehelloworld.c

录进上面的代码:
1
2
3
4
5
6
#include<stdio.h>
intmain(intargc,char*argv[])
{
printf("HelloWorld!n");
return0;
}

保留,而且回到终端实行:
1
2
%xcrunclanghelloworld.c
%./a.out

如今你可以在终端上看到熟习的HelloWorld!。你编译了一个C程序而且实行了它。一切都是在不利用IDE的情形下做的。深呼吸一下,乐意乐意。
我们在这里做了些甚么?我们将hellowrold.c编译成了叫a.out的Mach-o二进制文件。a.out是编译器的默许名字,除非你指定一一般的。
HelloWorld和编译器

如今可选择的编译器是Clang(读作:/’kl/)。Chris写了一些更多关于Clang细节的先容,能够参考:aboutthecompiler
归纳综合一下就是,编译器将会读进处置hellowrold.c,输入可实行文件a.out。这个历程包括了十分多的步骤。我们所要做的就是准确的实行它们。
预处置:



  • 序列化
  • 宏界说睁开
  • #include睁开(援用文件睁开)
语法和语义剖析:



  • 利用预处置后的单词构建词法树
  • 实行语义剖析天生语法树
  • 输入AST(AbstractSyntaxTree)
代码天生和优化



  • 将AST转化成更初级的两头码(LLVMIR)
  • 优化天生代码
  • 方针代码天生
  • 输入汇编代码
汇编程序



  • 将汇编代码转化成方针文件
毗连器



  • 将多个方针文件兼并成可实行文件(大概一个静态库)我们来看一个关于这些步骤的复杂的例子。
预处置

编译器将做的第一件事变是处置文件。利用Clang展现一下这个历程:
1
%xcrunclang-Ehelloworld.c

欧耶。输入了413行内容。翻开个编纂器看看究竟产生了甚么:
1
%xcrunclang-Ehelloworld.c|open-f

在文件顶部我们能看到良多以”#”开首的行。这些被称之为行标志语句的语句告知我们它前面的内容来自那里。我们必要这个。假如我再看一下hellowrold.c,第一行是:
1
#include<stdio.h>

我们都用过#include和#import。它们做的就是告知于处置器在#include语句的中央拔出stdio.h的内容。在方才的文件里就是拔出了一个以#开首的行标志。跟在#前面的数字是在源文件中的行号。每行最初的数字是在新文件中的行号。回到方才翻开的文件,接上去是体系头文件,大概一些被当作包裹着extern“C”的文件。
假如你转动到文件开端,你将会发明我们的helloworld.c的代码:
1
2
3
4
5
6
#2"helloworld.c"2
intmain(intargc,char*argv[])
{
printf("HelloWorld!n");
return0;
}

在Xcode中,你能够经由过程利用Product->PerformAction->Preprocess来检察任何一个文件的预处置输入。必定要注重这将会消费一些工夫来加载预处置输入文件(靠近100,000行)。
编译

下一个步骤:文本处置和代码天生。我们能够挪用clang输入汇编代码就像如许:
1
%xcrunclang-S-o-helloworld.c|open-f

看一看输入。我们起首注重到的是一些以点开首的行。这些是汇编指令。其他的是真实的x86_64汇编代码。最初是些标志,就像C中的那些标志一样。
我们夙昔三行入手下手:
1
2
3
.section__TEXT,__text,regular,pure_instructions
.globl_main
.align4,0x90

这三行是汇编指令,不是汇编代码。”.section”指令指出了哪个段接上去将会被实行。比用二进制暗示悦目多了。
下一个,.global指令申明_main是一个内部标记。这就是我们的main()函数。它可以从我们的二进制文件以外看到,由于体系要挪用它来运转可实行文件。
.align指令指出了上面代码的对齐体例。从我们的角度看,接上去的代码将会依照16比特对齐而且假如必要的时分用0
老尸 该用户已被删除
沙发
发表于 2015-1-21 11:18:55 | 只看该作者
要学会通过各种方法将面前的事情变成自己感兴趣的,那专研起来就不会是无聊和折磨了。
第二个灵魂 该用户已被删除
板凳
发表于 2015-1-24 12:05:11 | 只看该作者
自从苹果公司开放iOS SDK以来,大量的国内外的软件开发者将关注的目光聚集在苹果的iOS平台上。由于iPhone和iPad自一出现就给人带来了颠覆性的感觉
因胸联盟 该用户已被删除
地板
发表于 2015-1-31 15:47:47 来自手机 | 只看该作者
每个行业都一样,想要一天学有所成是不可能的,一定要做好努力的准备,做ios不是简单的学会oc语言。不怕多走弯路,就怕不肯动手。
精灵巫婆 该用户已被删除
5#
发表于 2015-2-6 20:22:04 | 只看该作者
从C语言入门,因为IOS开发用的是OC语言,是在C基础上的,不过也跟C不是很搭界,你可以直接学习OC语言也可以,
蒙在股里 该用户已被删除
6#
发表于 2015-2-18 13:30:06 | 只看该作者
其实在培训的过程中,学习到最多的就是查资料的方式,当时感觉老师好坑,什么都不告诉我们,让我们自己去查,但是现在觉得还是要自己解决问题,这样才能理解的更加深入。
爱飞 该用户已被删除
7#
发表于 2015-3-6 00:41:56 | 只看该作者
最后在做项目的时候一定要认真对待,毕竟这个直接和你的就业挂钩,这也是锻炼你实际操作的能力。
飘飘悠悠 该用户已被删除
8#
发表于 2015-3-12 17:34:59 | 只看该作者
以上可以同时进行,学习过程中尽量不要纠结细节和底层,要知道ios是封闭的、OC是高级语言,我们不可能过多地去了解它的原理,至少在新手阶段没有必要。用迭代的方式更新你的知识,而不是死抠一个知识点。
admin 该用户已被删除
9#
发表于 2015-3-15 11:19:56 | 只看该作者
iPhone文件系统NSFileManager讲解是本文要介绍的内容,主要是通过iphone文件系统来学习NSFileManager的使用方法,具体内容来看本文详解。
若相依 该用户已被删除
10#
发表于 2015-3-17 19:37:19 | 只看该作者
其实在培训的过程中,学习到最多的就是查资料的方式,当时感觉老师好坑,什么都不告诉我们,让我们自己去查,但是现在觉得还是要自己解决问题,这样才能理解的更加深入。
海妖 该用户已被删除
11#
发表于 2015-3-24 21:38:10 | 只看该作者
好处就是运行速度会变快,ios6针对系统的优化进一步加强了,很多网友测试ios6,第一感觉就是速度快,而且ios69会有一些新功能,新浪微博,facetime支持3G网等等。。弊端就是,现在的ios6只能算是正式版本的第一个版本,bug很多,不少人刷完ios6都出现了很多毛病,开不开机,缺少图标等等。。最好现在不要升级,等官网放出下一个版本的时候,再选择升级。。。
谁可相欹 该用户已被删除
12#
发表于 2015-3-26 13:59:46 | 只看该作者
以上可以同时进行,学习过程中尽量不要纠结细节和底层,要知道ios是封闭的、OC是高级语言,我们不可能过多地去了解它的原理,至少在新手阶段没有必要。用迭代的方式更新你的知识,而不是死抠一个知识点。
飘灵儿 该用户已被删除
13#
发表于 2015-4-12 14:15:30 | 只看该作者
down下code4app网站的每个分类的代码挨着看
深爱那片海 该用户已被删除
14#
发表于 2015-4-16 04:05:13 | 只看该作者
iPhone文件系统:创建、重命名以及删除文件,NSFileManager中包含了用来查询单词库目录、创建、重命名、删除目录以及获取/设置文件属性的方法(可读性,可编写性等等)。
乐观 该用户已被删除
15#
发表于 2015-4-18 10:44:44 | 只看该作者
其次学习方法和学习心态很重要,在学习当中应该保持一颗良好的心态。应该借鉴别人好的学习方法,大家互相帮助,取长补短。
莫相离 该用户已被删除
16#
发表于 2015-4-25 21:17:33 | 只看该作者
最后在做项目的时候一定要认真对待,毕竟这个直接和你的就业挂钩,这也是锻炼你实际操作的能力。
简单生活 该用户已被删除
17#
发表于 2015-5-6 22:11:43 | 只看该作者
在此,某不才愿将安装成功的Mac OS X系统的vmware虚拟机向有志学习iOS开发的各位学友们免费开放出来,经测试,可以在WindowsXP/Win7系统上完美运行,即便你的机器只有2GB内存。
再现理想 该用户已被删除
18#
发表于 2015-7-1 22:25:07 | 只看该作者
众多研发人员积极参与到iOS平台的开发中来也就不足为奇了。
愤怒的大鸟 该用户已被删除
19#
发表于 2015-7-10 03:32:04 | 只看该作者
好处就是运行速度会变快,ios6针对系统的优化进一步加强了,很多网友测试ios6,第一感觉就是速度快,而且ios69会有一些新功能,新浪微博,facetime支持3G网等等。。弊端就是,现在的ios6只能算是正式版本的第一个版本,bug很多,不少人刷完ios6都出现了很多毛病,开不开机,缺少图标等等。。最好现在不要升级,等官网放出下一个版本的时候,再选择升级。。。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-11-12 23:27

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表