compile,link与run的详细解析

来源:互联网 发布:80c51系列单片机 编辑:程序博客网 时间:2024/05/21 05:18

build一个App,会涉及到comile与link两步操作。

对于OC程序来说,comile一个.m文件会生成.o文件;如果是一个lib工程,compile操作会将工程中了所有的.m文件生成对应的.o,最后打包生成.a库文件。因此,.a库文件就是一堆.o文件的简单集合,不会包含其他的内容,包括资源文件等。

link操作则是将compile之后的.o文件,.a文件,资源文件等,link到一起,生成可执行文件。link操作与compile操作最本质的不同是compile操作不会涉及寻址操作,对于找不到的地址会通过占位符临时占位,只有经过link操作,才会将所有的占位符用真正的地址替换,从而让程序运行变为可能。e.g. A.m经过编译后变为了A.o,里边用到了一个全局变量int b,而b的定义在B.m文件中,A.m只有b的声明,这时,A.o会用一个占位符临时替换b的位置,因此编译不会出错。到了link阶段会把A.o,B.o都link到一起,linker找到b定义的位置,并替换A.o中的占位符。如果linker最终没有找到b的定义,就无法替换A.o中的占位符,会出现“symbol(s) not found”错误。


0 0