【Linux】超详细介绍gcc/g++以及程序翻译过程

打印 上一主题 下一主题

主题 805|帖子 805|积分 2415

目录

一、快速熟悉一下gcc/g++
二、程序的翻译过程
1、预处置处罚:-E选项
分为一以下四步:
(1)、通过指令检察预处置处罚结果:-E选项
(2)、为什么#ifndef、#define、#endif 可以防止头文件被重复包含?
2、编译:-S选项
(1)、通过指令检察编译结果:-S选项
3、汇编:-c选项
(1)、通过指令检察汇编结果:-c 选项
4、链接:-o选项
1、-o选项
2、检察 可执行文件所链接/依靠的库:ldd + 可执行文件名
3.为什么linux可以直接运行C语言?


一、快速熟悉一下gcc/g++

   

  可以用来编译链接.c文件,使之生成可执行文件。
  此中 -o 选项是用来重定名为“my.exe”;
  注意:
  (1)、C语言既可以使用gcc也可以使用g++;
  (2)、C++只能使用g++;
  (3)、gcc和g++的使用方法是完全相同的,所以以解说gcc为主;
  二、程序的翻译过程

   会履历以下四步:C语言为例
  1、预处置处罚:-E选项


   分为一以下四步:

  (1)、 头文件展开:
  所谓头文件展开,本质是预处置处罚的时候,将头文件的内容拷贝到源文件。
  (2) 、去注释:即把注释给去掉
  (3)、宏替换:在编译之前将对应的宏标识符替换为对应的宏定义内容。
  (4)、条件编译:
  我们可以通过给编译器传递不同的宏值,来进行对代码的动态裁剪
  条件编译应用:
  各种软件的专业版和社区版就是使用同一套源代码,只是社区版是通过条件编译将某些功能给去掉了,所以专业版功能会更多。如下:
  若源代码中有某些ifndef指令的话,就可以通过条件编译打印出不同的内容。
  

  (1)、通过指令检察预处置处罚结果:-E选项

   -E 选项:表现从如今开始进行程序翻译的过程,当预处置处罚做完就停下来。
  

  (1)、使用 -o 选项将生成的数据放到 .i 文件中(若不使用-o选项,就会将结果打印到终端上)
  (2)、.i 文件通常称为预处置处罚文件,里面是预处置处罚四个步调后所产生的结果。
  注意:预处置处罚后的代码还是C语言:
  

  (2)、为什么#ifndef、#define、#endif 可以防止头文件被重复包含?

   这也是条件编译的应用场景之一:
  我们知道在预处置处罚阶段,头文件是会被展开的,第一次条件检查检测该宏有没有被定义,假如没有定义就会进行定义,假如第二次又包含了该头文件,就会再展开,再条件检测,发现该宏已经被定义过了,就不会在使用该头文件里面的内容了。
  2、编译:-S选项

   C语言——>汇编:将C语言翻译成汇编语言。
  (1)、通过指令检察编译结果:-S选项

   

  通过 -S 选项对预处置处罚文件(.i 文件)进行处置处罚,会生成 .s 文件,.s 文件称为汇编语言源文件,纵然不消 -o 选项指定名字,也会自动在同级目录生成同名.s文件,.s文件里面内容就是由C语言转换而来的汇编语言:
  

  3、汇编:-c选项

   汇编语言——>二进制语言(可重定位目的二进制文件,但不能执行)
  将汇编语言翻译成二进制语言。
  (1)、通过指令检察汇编结果:-c 选项

   

  (1)、通过 -c 选项就就可以执行汇编过程,会生成 .o 文件(纵然不使用 -o 选项,也会生成同名.o文件)。
  (2)、 .o 文件称为可重定位目的二进制文件,里面放的全是二进制数据:因为linux终端是是用于显示文本内容,所以检察二进制数据时会显示乱码。

  
  注意 .o 文件是不能被执行的( ./ ):
  

  4、链接:-o选项

1、-o选项

   

  (1)、通过-o选项进行链接操作,生成就是可执行文件。
  (2)、注意 -o 选项一定要指定生成的文件名:
  

  (3)、生成的文件就可以执行了:
  

  2、检察 可执行文件所链接/依靠的库:ldd + 可执行文件名

   (1)、首先我们要知道库分为动态库和静态库,后缀名分别如下:
  

  (2)、ldd指令:
  

  3.为什么linux可以直接运行C语言?

   平台要支持开发,就必须要提前字体系中安装各种语言的标准头文件+库文件。
  如下是linux中安装的C语言头文件:
  

  这就是为什么linux可以直接运行C语言。
  
  


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

何小豆儿在此

金牌会员
这个人很懒什么都没写!

标签云

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