设为首页 加入收藏

TOP

gcc编译过程简述(一)
2014-03-10 12:52:22 来源: 作者: 【 】 浏览:268
Tags:gcc 编译 过程 简述

  在linux系统上,从源文件到目标文件的转化是由编译器完成的。以hello.c程序的编译为例,如下:

  dfcao@linux: gcc -o hello hello.c

  在这里,gcc编译器读取源文件hello.c,并把它翻译成一个可执行文件 hello。

  这个翻译过程可分为四个阶段逐步完成 :预处理,编译,汇编,链接,如下图所示。

  逐步做下简单分析:

  在未编译前,hello.c 的源代码如下

  #include

  int main()

  {

  printf("hello, world\n");

  }

  第一步、预处理阶段

  执行命令: gcc -o hello.i -E hello.c

  或者 cpp -o hello.i hello.c (这里cpp不是值c plus plus,而是预处理器the C Preprocessor)

  预处理器cpp根据以字符开头#开头的命令,修改原始C程序。比如hello.c中的第一行为 #include ,预处理器便将stdio.h的内容直接插入到程序中。

  预处理之后得到文本文件hello.i,打开如下

  # 1 "hello.c"

  # 1 ""

  # 1 "<命令行>"

  # 1 "hello.c"

  # 1 "/usr/include/stdio.h" 1 3 4

  ...

  ...

  ...

  extern void funlockfile (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__));

  # 940 "/usr/include/stdio.h" 3 4

  # 2 "hello.c" 2

  int main()

  {

  printf("hello, world\n");

  }

  在源代码的前面插入了stdio.h,整个hello.i 的行数由hello.c的6行变到了855行!

  第二步、编译阶段

  执行命令: gcc -o hello.s -S hello.i

  或者 ccl -o hello.s hello.i

   

首页 上一页 1 2 3 4 下一页 尾页 1/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇c++ 创建socket server 下一篇实现单实例多线程安全API问题

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·HTTPS 详解一:附带 (2025-12-26 02:20:37)
·TCP/IP协议到底在讲 (2025-12-26 02:20:34)
·TCP和UDP在socket编 (2025-12-26 02:20:32)
·有没有适合新手练习 (2025-12-26 01:48:47)
·用清华镜像网怎么下 (2025-12-26 01:48:44)