Chinaunix首页 | 论坛 | 博客
  • 博客访问: 57449
  • 博文数量: 18
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 114
  • 用 户 组: 普通用户
  • 注册时间: 2013-07-25 01:02
文章分类

全部博文(18)

文章存档

2014年(5)

2013年(13)

我的朋友

分类: LINUX

2013-08-24 10:19:49

 1、gcc编译过程
 1、预处理(一般包含头文件、宏替换、条件编译)
  包含头文件:一些头文件,在这里只是一些函数申明,如stdio.h 并没有调用库函数,真正调用库函数是在最后一步,链接阶段。
  宏替换:宏定义可以有分号且可以是函数。如:#define Max(a,b)((a)>(b)?(a):(b));这种宏定义是正确的。
  条件编译:这是一些防重复包含的东西。如(#ifndef          
                                                            #define)
 如果函数名为/*hello*/   则防重复包含的格式为#ifndef _HELLO_H_
                                                                #define _HELLO_H_
  防重复包含顾名思义就是防止一些命令等的重复使用包含,在写一些大的程序是很容易会重复包含的,如一些函数的嵌套调用
        就不得不用防重复包含了.
其实此过程处理的是一些带#的东西
 2、编译
  此过程是检查一些语法错误的,并转换成汇编代码。
 3、汇编
  汇编是将汇编代码转换成不可执行的二进制代码
 4、链接
  成功调用库函数,最终来生成可执行文件。
   
 静态函数库:
 
  这类库的名字一般是libxxx.a;利用静态函数库编译成的文件比较大,因为整个函数库的所有数据都会被整合进目标代码中,
    他的优点就显而易见了, 即编译后的执行程序不需要外部的函数库支持,而且程序执行的速度较快,因为所有使用的函数都已经被编译进去了。
    当然这也会成为他的缺点,因为如果静态函数库改变了,那么你的程序必 须重新编译。很不便于维护。

  动态函数库:

  这类库的名字一般是libxxx.so;相对于静态函数库,动态函数库在编译的时候并没有被编译进目标代码中,
    你的程序执行到相关函数时才调用该函数 库里的相应函数,因此动态函数库所产生的可执行文件比较小。
    由于函数库没有被整合进你的程序,而是程序运行时动态的申请并调用,所以程序执行速度较慢。而且程序的运行环境中必须 提供相应的库来支持程序的执行。
    动态函数库的改变并不影响你的程序,所以动态函数库的升级比较方便。也就是便于维护。

 

 

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