首页 > 编程知识 正文

centos安装gcc编译器,linux离线安装gcc编译器

时间:2023-05-04 08:25:55 阅读:120327 作者:3275

一.基本选项

GCC是开源软件中顶级的c编译器

gcc -Wall -o hello hello.c

-W打开警告选项

全部打开

-v显示详细信息

-c只编译生成对象文件,不生成可执行文件。 生成. o文件

虽然GCC没有链路排名问题,但是希望遵守后面定义和前面调用的规则

有效管理庞大的项目,有make

二.链接外部库

标准库:

gcc-wall main.c/usr/lib/libm.a-ocalc

gcc -Wall main.c -lm -o calc

-lm相当于libm.a (仅限标准库)

使用此选项可以使用头文件

-I选项指示在其中搜索头文件的目录

gcc-wall-I/opt/my soft/include-omain

-L指定要搜索的库文件目录

指定环境变量

如果同时定义了-I、-L和环境变量,则优先查找-I和-L;如果找不到,则查找环境变量;如果尚未找到,则查找系统路径

建议使用-I,-L方法

三、建立自己的资源库

ar命令:将许多目标文件. o合并为一个库文件

arcrlibname.afile1. ofile2. o . filen.o

检查库中有多少目标文件

ar t libName.a

gcc-wall-cmain.clib func.a-o hello

不能更换-c main.c和libFunc.a的顺序

gcc -Wall main.c -L. -lfunc -o hello

gcc-wall main.c-l/home/Baiyun/study/my soft-l func-o hello

四.动态库和静态库

. lib .a

. dll .so

使用ldd a.out验证a.out所需的动态库

五、c语言标准

gcc不带选项时,使用GNU标准编译,带-ansi,-std,最新版为-std=c99

gcc-wall-ansi-d _ GNU _ source pi.c-opp

使用标准c进行编译,链接时使用GNU的库

-ansi -pedantic两个参数连用时,严格按照标准c调用

六.-Wall选项

-沃尔是以下聚会

“-Wcomment”(用于检测注释是否嵌套) )。

'-w format ' (用于检测传递给printf和scanf的值类型是否正确() )。

'-Wunused ' (用于检测变量是否已声明但未使用) ) )。

'-Wimplicit ' (用于检测是否正在使用未声明的函数) )。

'-Wreturn-type ' (用于检测函数声明中有返回值但实现中没有返回值() )。

'-W '

'-Wcnversion '

'-Wshadow '

'-Wcast-qual '

'-Wwrite-strings '

'-Wtraditional '

七.预处理

gcc -Wall -DTEST main.c -o ouput

-D后面跟预处理定义的宏

要向预定义宏中添加值,请执行以下操作:

gcc -Wall -DNUM=123 main.c o ouput

gcc -Wall -DNUM='1 2' main.c o ouput

如果不为宏设置值,则默认值为1

如果不想编译,只需要看到预处理过程,请使用-E参数。 (以下两个也可以。

gcc -E test.c

gcc -Wall -c -save-temps test.c生成. I和. s文件, s文件是汇编语言, I文件是预处理结果, I文件是c语言预处理结果, ii是c预处理结果

查看GCC中的预定义宏

CPP-DM/dev /空值

八.编译的功能调试

-g指令允许编译器在可执行文件和目标文件中存储其他调试信息。 通过这些信息,可以将机器代码信息和源程序信息联系起来。 GCC的调试器是GDB

Coredump文件分析

gdb a.out core.2297

九、编译优化

编译器可以生成不同平台上的可执行文件。

1、源代码级优化,不需要机器码知识

(1)、通用子表达式删除) CSE ),重用已经计算出的变量

(2)、嵌入函数(FL ) ) ) ) )。

(3)、循环优化开关gcc-wall-O3-fun roll-loops test.c-o test

2、机器码水平优化

3、优化水平:

gcc -OLEVEL

级别=0- 3

0表示不进行优化

水平越高,优化的强度越大

十、优化与调试

优化和调试通常是不一致的,GCC允许同时使用优化和-g,并且可以同时进行优化和调试

十一、编译c程序

GNU的c编译器实际上是真正的c编译器,它将c直接编译成汇编语言,然后转换成机器码。 实际编译器将c语言转换为c语言,转换为汇编,然后再转换为机器代码。 因此,GCC编译器生成的c程序性能更高。 编译c的过程与编译c的过程相同,只是使用g命令,

gcc和g的大多数命令是相同的。

因为g搜索c的标准库,所以c的目标文件必须用g链接

十二、编译如何工作

编译过程由多个阶段组成,每个阶段使用的工具都不同,其中包含许多称为工具链的工具。

包括以下步骤:

1、预处理

2、将源程序编译成汇编语言

3、汇编语言源程序编译成最终机器码,生成目标文件

4、建立最终执行文件

1、进行cpp hello.c -o hello.i预处理,生成hello.i文件

2、将gcc -Wall -S hello.i编译为汇编语言,生成hello.s文件(编译为汇编语言的源程序用-S参数表示) ) ) ) ) )

3、as hello.s -o hello.o生成目标文件

4、生成gcc hello.o可执行文件

十三、与编译有关的两个工具

1、优化器gprof

gcc -Wall -pg main.c -o pro

-pg参数将GCC的部分测试代码插入可执行文件中,并计算函数执行的时间和次数

程序运行完成后,将生成gmon.out文件,并使用gprof gmon.out显示信息

2、覆盖测试工具gcov

可以发现程序中的哪些代码从未调用过

gcc-wall-f配置文件- arcs-ftest-coverage cov.c

生成cov.gcno

运行程序后,生成cov.gcda

使用gcov cov.c进行检查

生成cov.c.gcov

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。