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(大写)
目录 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 链接过程主要包括地址和空间分配、符号决议和重定位等这些步骤 (编辑:开发网_新乡站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
站长推荐