加入收藏 | 设为首页 | 会员中心 | 我要投稿 开发网_新乡站长网 (https://www.0373zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

Linux:GCC安装与编译(详细)

发布时间:2023-01-14 15:02:03 所属栏目:Linux 来源:
导读:  目录

  1.gcc安装

  命令:$sudo apt install gcc

  2.gcc分布编译

  为四个过程:预处理(预编译),编译,汇编,链接。(详细内容请看 6.编译和链接)

  (1)预编译(-E(大写)
  目录
 
  1.gcc安装
 
  命令:$sudo apt install gcc

  2.gcc分布编译
 
  为四个过程:预处理(预编译),编译,汇编,链接。(详细内容请看 6.编译和链接)
 
  (1)预编译(-E(大写):预处理指定的源文件,但是不进行编译)
 
  $gcc -Emain.c-o main.i
 
  (2)编译(-S(大写):编译执行的源文件,但是不进行汇编)
 
  $gcc -S main.i -o main.s
 
  (3)汇编(-c(小写):编译,汇编指定的源文件,但是不进行链接)
 
  $gcc -c main.s -o main.o
 
  (4)链接(-o:指定生成文件的文件名)
 
  $gcc main.o -o main
 
  3.gcc一步编译
 
  命令如下: $gcc main.c
 
  如果不给-o,系统会默认生成可执行文件a.out,如果想自定义最终生成的可执行文件的文件名,可以通 过-o: gcc main.c -o main
 
  前三个步骤,可通过一行代码,直接将源文件变成目标文件“.o”:
 
  $gcc -c main.c
 
  4.编译后执行
 
  在Linux中,通过路径+文件名的方式可以启动一个程序,这里的"./"可不 可以省略。
 
  不加路径的话,系统将其看做一个命令, 而且并不是在我当前相对目录下找main或者a.out,而是默认直接去标准路径下找main和a.out,当然 找不到的话,就会报错,说在/usr/bin里面找不到对应的命令。
 
  怎样像pwd,ls这些命令一样,不需要路径就可以执行呢?
 
  可以将我们刚才生成的main和a.out放到/usr/bin里面,则这时 系统就可以找到了,就不会报错了,就可以像pwd,ls这些命令一样, 不需要路径也可以执行了。
 
  5.编译链接过程

  6 .编译和链接的详细内容
 
  6.1 预编译
 
  首先是源代码文件“hello.c”和相关头文件,如stdio.h等被预编译器cpp预编译成一个“.i”文件。
 
  命令:$gcc -Emain.c-o main.i (-E只能进行预编译)。
 
  预编译过程主要处理源代码文件中的以“#”开头的预编译指令linux编译器,比如“#include”,“#define”等,
 
  主要的处理规则如下:
 
  (1)将所有“#define”删除,并且展开所有的宏定义。
 
  (2)处理所有条件预编译指令,如“#if”,"#ifdef",“#else”
 
  (3)处理“#include”预编译指令,将被包含的文件插入到该预编译指令的位置。
 
  (4)删除所有注释
 
  (5)添加行号和文件名标识
 
  (6)保留所有#pragma编译器指令
 
  6.2 编译
 
  编译过程就是将预处理完的文件进行一系列词法分析、语法分析、语义分析及优化后生产相应的汇编代码文件。
 
  命令:$gcc -S main.i -o main.s
 
  现在版本的GCC把预编译和编译两个步骤合并成为一个步骤,使用一个叫做cc1的程序来完成这两个步骤。实际上,gcc这个命令只是这些后台程序的包装,它会根据不同的参数去要求去调用预编译编译程序cc1、汇编器as、链接器ld。
 
  编译过程一般分为6步:扫描、语法分析、语义分析、源代码优化、代码生成和目标代码优化。
 
  6.3汇编
 
  汇编器是将汇编代码转变成机器可以执行的指令
 
  命令:$gcc -c main.s -o main.o
 
  或者 :$as main.s -o main.o
 
  或者使用gcc命令从C源代码文件开始,经过预编译、编译和汇编直接输出目标文件
 
  $gcc -c main.c -o main.o
 
  6.4链接
 
  链接的主要内容就是把各个模块之间相互引用的部分处理好,使得各个模块之间能够正确地衔接。
 
  命令:$gcc main.o -o main
 
  链接过程主要包括地址和空间分配、符号决议和重定位等这些步骤
 

(编辑:开发网_新乡站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!