Chinaunix首页 | 论坛 | 博客
  • 博客访问: 439268
  • 博文数量: 63
  • 博客积分: 1175
  • 博客等级: 少尉
  • 技术积分: 1204
  • 用 户 组: 普通用户
  • 注册时间: 2012-04-19 11:33
文章分类
文章存档

2015年(1)

2014年(3)

2013年(7)

2012年(52)

分类:

2012-04-20 17:52:41

原文地址:程序编译的过程 作者:glinuxi

    在OS提到  编译:将源代码生成多个目标模块
                  链接:将目标模块与他们需要的库链接到一块,形成完整的装入模块
                  装入:由装入程序将装入模块装入内存

     链接方式:
  • 静态链接:在程序运行之前,将各个目标模块即他们需要的库函数,链接成一个完整的装配模块,以后不再拆卸。
  • 装入时动态链接:在装入内存时,采用边装入边链接的方式。
  • 运行时动态链接:模块的链接推迟到运行时判断。  
     装入方式:
  • 绝对装入方式:程序中使用的是绝对地址,将目标模块装入到内存中事先指定的位置。
  • 可重定位装入方式:程序中使用的地址是相对地址,使得物理地址和逻辑地址不同
  • 动态运行时装入方式:将装入模块装入到内存中任何允许的位置,故可用于多道程序环境;但是不允许程序运行时在内存中移动位置。
在使用gcc编译程序时,编译过程可以分为4个阶段
      预处理:处理源文件中的#ifdef、#include、#define 预处理命令
      gcc -E test.c -o test.i
      编译:将*.i文件,编译生成汇编文件*.s
       gcc -S test.s  -o test.o
       汇编:将输入的汇编文件*.s转换成二进制机器代码*.o
       gcc  -c test.s -o test
       链接:将二进制机器码生成可执行文件。
   
    

阅读(652) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~