当前位置:网站首页>GCC的基本用法
GCC的基本用法
2022-07-24 11:39:00 【小原小原吃汤圆】
目录
一、GCC
GCC(GNU Compiler Collection)即GNU编译器套件,属于一种编程语言编译器,其原名为GCC(GNU C Compiler)即GNU c语言编译器,虽然缩写一样但是功能上区别很大。GCC的初衷是为GNU操作系统专门编写的一款编译器,原本的GNU是专用于编译C代码,现如今已扩展为可以编译C、C++、Java、Objective-C等多种编程语言的编译器集合了
二、GCC、gcc、g++三者关系
gcc(GNU C Compiler)是GCC中的c编译器,而g++(GNU C++ Compiler)是GCC中的c++编译器。gcc和g++两者都可以编译c和cpp文件,但存在差异。gcc在编译cpp时语法按照c来编译但默认不能链接到c++的库(gcc默认链接c库,g++默认链接c++库)。g++编译.c和.cpp文件都统一按cpp的语法规则来编译。所以一般编译c用gcc,编译c++用g++。
三、gcc编译过程
用gcc编译*.c文件并非直接生成可执行文件,中间还经历了预处理、编译和汇编几个过程

- 在预处理阶段,gcc会把需要调用的头文件包含进来,替换宏常量和宏代码段
- 在编译阶段,gcc会检查代码的规范性、是否有语法错误等,在检查无误后,gcc会把文件翻译成 .s 后缀的汇编文件
- 在汇编阶段,gcc会把 .s 后缀的汇编文件 翻译成 .o后缀的目标文件(机器可识别的二进制文件)
- 在链接阶段,gcc会把目标文件链接到库中,生成可执行文件
四、文件类型
在Linux系统中,可执行文件没有统一的后缀,系统从文件的属性来区分可执行文件和不可执行文件。而gcc则通过后缀来区别输入文件的类别,下面介绍gcc所遵循的部分约定规则
.c为后缀的文件,C语言源代码文件;
.a为后缀的文件,是由目标文件构成的库文件;
.C,.cc或.cxx 为后缀的文件,是C++源代码文件;
.h为后缀的文件,是程序所包含的头文件;
.i 为后缀的文件,是已经预处理过的C源代码文件;
.m为后缀的文件,是Objective-C源代码文件;
.o为后缀的文件,是编译后的目标文件;
.s为后缀的文件,是汇编语言源代码文件;
.S为后缀的文件,是经过预编译的汇编语言源代码文件
五、gcc编译选项
选项 | 作用 |
E | 激活预处理;头文件、宏等展开(.i文件) |
S | 激活预处理、编译;生成汇编代码(.s文件) |
c | 激活预处理、编译、汇编;生成目标文件(.o文件) |
无 | 激活预处理、编译、汇编、链接;生成可执行文件(.out文件) |
o | 生成目标 |
Wall | 打开编译告警(所有) |
g | 嵌入调试信息,方便gdb调试 |
llib | 链接 lib 库 (这里是小写 L ) 相当于 C++ #pragma comment(lib, “xxx.lib”) |
Idir | 增加 include 目录 (这里是大写 i ) 头文件路径 |
LDir | 增加 lib 目录 (编译静态库和动态库) |
假设源程序文件名为test.c。
1. 无选项编译链接
用法:gcc test.c
作用:将test.c预处理、汇编、编译并链接形成可执行文件。这里未指定输出文件,默认输出为a.out。
2. 选项 -o
用法:gcc test.c -o test
作用:将test.c预处理、汇编、编译并链接形成可执行文件test。-o选项用来指定输出文件的文件名。
3. 选项 -E
用法:gcc -E test.c -o test.i
作用:将test.c预处理输出test.i文件。
4. 选项 -S
用法:gcc -S test.i
作用:将预处理输出文件test.i汇编成test.s文件。
5. 选项 -c
用法:gcc -c test.s
作用:将汇编输出文件test.s编译输出test.o文件。
6. 无选项链接
用法:gcc test.o -o test
作用:将编译输出文件test.o链接成最终可执行文件test。
7. 选项-O
用法:gcc -O1 test.c -o test
作用:使用编译优化级别1编译程序。级别为1~3,级别越大优化效果越好,但编译时间越长。
边栏推荐
- The third day of hcip mGRE experiment
- [golang] golang implements MD5 encryption function
- 一周精彩内容分享(第13期)
- [golang] golang implements the URLEncode URLDecode function
- IT圈中的Bug的类型与历史
- Introduction to Devops and common Devops tools
- Experience of redis deepwater area -- Interview reference
- oracle 11.2.0.4 asm单实例不随系统启动而自动开启
- Jackson parsing JSON detailed tutorial
- Tensor and numpy convert "suggested collection" to each other
猜你喜欢

Robot framework official tutorial (I) getting started

【反序列化漏洞-02】PHP反序列化漏洞原理测试及魔术方法总结

Text message verification of web crawler

How to choose sentinel vs. hystrix current limiting?

Two important laws about parallelism
![Operational amplifier - Notes on rapid recovery [II] (application)](/img/fd/e12f43e23e6ec76c2b44ce7813e204.png)
Operational amplifier - Notes on rapid recovery [II] (application)

Directional crawling Taobao product name and price (teacher Songtian)

Semaphore details
![Detailed OSPF configuration of layer 3 switch / router [Huawei ENSP experiment]](/img/a9/f080940ec7bf94ab83c922990efa62.png)
Detailed OSPF configuration of layer 3 switch / router [Huawei ENSP experiment]

链表——剑指offer面试题 02.07. 链表相交
随机推荐
Svn server and client installation (Chinese package) and simple use
Nacos permissions and databases
生信周刊第37期
视频回放 | 如何成为一名优秀的地学和生态学领域的国际期刊审稿人?
Jackson parsing JSON detailed tutorial
Best practice | using Tencent cloud AI character recognition to realize enterprise qualification certificate recognition
cgo+gSoap+onvif学习总结:9、go和c进行socket通信进行onvif协议处理
[golang] golang implements the URLEncode URLDecode function
PDF处理还收费?不可能!
String - Sword finger offer 05. replace spaces
scrapy-redis写项目备忘
Literature record (part109) -- self representation based unsupervised exemplar selection in a union of subspaces
IT圈中的Bug的类型与历史
MySQL creates partition tables and automatically partitions them by day
离散分布常用公式及应用场景
字符串——344.反转字符串
Win10 icon turns white, recovery method
08 [AIO programming]
String -- 344. Reverse string
08.01 adjacency matrix