目录

1.gcc安装

2.gcc分布编译

(1)预编译(-E(大写):预处理指定的源文件,但是不进行编译)

(2)编译(-S(大写):编译执行的源文件,但是不进行汇编)

(3)汇编(-c(小写):编译,汇编指定的源文件,但是不进行链接)

(4)链接(-o:指定生成文件的文件名)

3.gcc一步编译

4.编译后执行

5.编译链接过程

6 .编译和链接的详细内容

6.1 预编译

6.2 编译

6.3汇编

6.4链接


1.gcc安装

命令:$sudo apt install gcc

2.gcc分布编译

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

(1)预编译(-E(大写):预处理指定的源文件,但是不进行编译)

$gcc -E main.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 -E main.c -o main.i (-E只能进行预编译)。

预编译过程主要处理源代码文件中的以“#”开头的预编译指令,比如“#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

链接过程主要包括地址和空间分配、符号决议和重定位等这些步骤

:该内容来自《程序员的自我修养——链接、装载与库》 第二章编译和链接

Linux:GCC安装与编译(详细)相关推荐

  1. linux下安装DB2的详细步骤

    我也是才学习,在网上找了一个在linux下安装DB2 的步骤,共享给大家看看了. linux下安装DB2的详细步骤! 第一步:检查程序包及其版本 在软件包管理中查看下列软件包是否安装,如没有安装,先安 ...

  2. linux gcc安装

    2004年4月20日最新版本的GCC编译器3.4.0发布了.目前,GCC可以用来编译C/C++.FORTRAN.java.OBJC.ADA等语言的程序,可根据需要选择安装支持的语言.GCC 3.4.0 ...

  3. linux C++安装并编译boost库

    编译安装 ​​​​ wget https://dl.bintray.com/boostorg/release/1.67.0/source/boost_1_67_0.tar.gz tar -zxvf b ...

  4. linux gcc 安装方法,GCC安装方法 (Linux)

    1.在fedora9中安装gcc4.3.4和gcc4.1.2,出现: mpfr和gmp错误,中止.其实gmp check并没有错.只有mpfr check出错,只缺少一个mpfr.h文件,在网上下载m ...

  5. Linux下安装Oracle 11g详细过程

    需要安装Oracle DataGuard,所以先要安装单台Oracle11g,下面是Linux下单台Oracle11g的详细安装过程. 1,安装环境 硬件环境:2台linux虚拟机,CentOS6.4 ...

  6. 手把手教你Linux虚拟机安装(超详细)

    大家好,我是才辰. 前几天由于学习需要,需要安装Linux系统.所以我把这次安装的整个路程记录下来,既能方便自己日后查看,同时也能帮助一些需要的人. 这篇文章非常详细,可以说自己安装过程的慢动作演示, ...

  7. linux解压gcc,Linux,GCC安装(解压版)

    一.安装Gcc前,需要安装依赖: 1.gmp安装: 下载:gmp-6.0.0a.tar.bz2 解压:tar jxf gmp-6.0.0a.tar.bz2 cd gmp-6.0.0 ./configu ...

  8. 在Linux下安装MySQL(详细)

    在Linux下安装MySQL数据库 ①下载并上传到/opt/soft(目录是自己创建的) ②解压: 输入: tar -xvf mysql-5.7.27-1.el7.x86_64.rpm-bundle. ...

  9. 在linux下安装fortran编译器详细教程

    在linux下安装fortran编译器 本教程安装的编译器是Intel® Parallel Studio XE 2013 for Linux*,建议使用相同的版本(也可自行去下载Linux版的压缩包) ...

  10. linux下安装ffmpeg的详细教程

    一.centos linux下安装ffmpeg 1.下载解压 wget http://www.ffmpeg.org/releases/ffmpeg-3.1.tar.gz tar -zxvf ffmpe ...

最新文章

  1. 二维数组动态分配内存
  2. C语言中图形方式界面怎么,「分享」C语言如何编写图形界面
  3. php 验证码需开启gd2
  4. 富文本编辑器:Typora(编辑与预览一体化)
  5. OpenVAS安装说明
  6. SSH: 关于remote主机上操作系统变更后SSH连接问题
  7. Android手势监听类GestureDetector的使用
  8. Navicat for MySQL_11.2.15破解版
  9. 测评EasyRecovery的数据恢复效果与多种功能
  10. 【Java8】Function 讲解
  11. 刘宇凡:莫沉浮华,归于平凡
  12. 网吧游戏服务器制作教程,图文教程:网吧无盘系统服务端设置细节
  13. javascript:void(0)的作用
  14. 按计算机病毒的传染方式来分类可以分为良性,5、 计算机病毒分为哪几类?传染途径有哪些?...
  15. 团队作业——Alpha冲刺 1/12
  16. linux怎么读取群辉数据,Linux下读取群晖SHR/RAID硬盘组 Data Recovering of Synology DSM SHR/RAID Volume...
  17. matlab ifft取实部,[合集] matlab中IFFT的问题
  18. Java端生成二维码
  19. 7-23 清点代码库(简洁AC+多方法)
  20. 四旋翼飞行器控制pid学习笔记

热门文章

  1. 在FMS服务器端侦听流的发布
  2. 易语言PHP非对称加密,openssl调用大集合[易语言源码] | 贝贝吧
  3. opencv的Mat中step
  4. java如何让cpu过负荷_服务器开发过载问题如何解决
  5. 【转】【深度学习MobileNet】——深刻解读MobileNet网络结构
  6. Qt QScrollArea 用法 QScrollArea不显示 QScrollArea没铺满
  7. DPDK - flow Haripin
  8. python链表操作_python操作链表的示例代码
  9. qt5.15.1及以上版本进行编译(windows64位)
  10. 使用WIN32汇编语言实现一个基本windows窗口的过程分析