Linux操作系统笔记——GCC编译器

简介: Linux操作系统笔记——GCC编译器

一、GCC编译器概念


GCC编译器是GNU编译器的套件,它是Linux操作系统中最常用的编译器之一,是用于编程开发的编译器,并支持多种编程语言,例如支持c/c++语言,还有java、go语言等等。


二、GCC支持的文件类型


GCC支持的常见文件类型有以下:

扩展名 说明
.c C源程序
.C/.cc C++源程序
.a 库文件
.h 头文件
.i 经过预处理的C程序
.ii 经过预处理的C++程序
.o 编译后的目标程序


三、GCC编译过程


image.pngimage.pngimage.png

image.png

(一)预编译


首先GCC编译器通过预编译,读取源程序,对头文件、预编译语句和一些特殊符号进行分析和处理,可以通过在gcc命令后跟参数-E,即可完成对代码的预编译,如下预编译一个名称为hello.c的C源程序:

gcc -E hello.c  //预编译


hello.c文件内容如下:

#include <stdio.h>
int main(){
  printf("Hello Linux!\n");
  return 0;
}


执行命令后:

1667232377107.jpg


[yyx@localhost ~]$ vi hello.c
[yyx@localhost ~]$ gcc -E hello.c

1667232417992.jpg

将预编译的结果保存在hello.i文件中,可以在后跟参数-o,确定输出文件的名称,执行以下命令:

gcc -E hello.c -o hello.i


(二)编译


编译的作用是检查代码的语法和将无误的预编译后的文件转换为汇编语言,并自动一个生成扩展名为.s的文件,即可完成对代码的编译,如下编译一个名称为hello.c的C源程序,后跟参数-S,表示进行编译但不汇编,生成汇编代码:

gcc -S hello.c


在Linux终端输入命令:

1667232438087.jpg


(三)汇编


汇编是将汇编代码转为目标代码,其参数是-c,它会自动生成一个扩展名为.o的目标程序,即只编译汇编,而不连接生成可执行文件,如下:

gcc -c hello.c


(四)连接


连接的功能是连接目标代码,并生成可执行文件,也是通过gcc命令,通过对hello.o或hello.c文件都可以进行连接,后跟参数-o,从而确定可执行文件的名称,如下:

gcc hello.c -o hello


执行下列命令:

[yyx@localhost ~]$ gcc hello.c -o hello
[yyx@localhost ~]$ ./hello


在Linux终端输入命令,得到程序的执行结果:

1667232482537.jpg


例子


例如,在Ubuntu中编写一个ch.c文件,其目的是从键盘输入一个字符,如果是大写字符,则输出它对应的小写字符;如果是小写字符,则输出它对应的大写字符。

首先,通过vi编辑器,执行vim ch.c:

linux@ubuntu:/mnt/hgfs/VMShare$ vim ch.c


在终端输入命令:

1667232508401.jpg

编写代码:

1667232521060.jpg

输出可执行文件,并执行:

1667232533360.jpg



相关文章
|
2天前
|
Linux 开发工具 C语言
Linux 安装 gcc 编译运行 C程序
Linux 安装 gcc 编译运行 C程序
20 0
|
3天前
|
Linux
Linux(5)WIFI/BT调试笔记
Linux(5)WIFI/BT调试笔记
17 0
|
4天前
|
Linux 编译器 Android开发
FFmpeg开发笔记(九)Linux交叉编译Android的x265库
在Linux环境下,本文指导如何交叉编译x265的so库以适应Android。首先,需安装cmake和下载android-ndk-r21e。接着,下载x265源码,修改crosscompile.cmake的编译器设置。配置x265源码,使用指定的NDK路径,并在配置界面修改相关选项。随后,修改编译规则,编译并安装x265,调整pc描述文件并更新PKG_CONFIG_PATH。最后,修改FFmpeg配置脚本启用x265支持,编译安装FFmpeg,将生成的so文件导入Android工程,调整gradle配置以确保顺利运行。
24 1
FFmpeg开发笔记(九)Linux交叉编译Android的x265库
|
15天前
|
监控 Unix Linux
Linux操作系统调优相关工具(四)查看Network运行状态 和系统整体运行状态
Linux操作系统调优相关工具(四)查看Network运行状态 和系统整体运行状态
30 0
|
17天前
|
Linux 编译器 开发者
Linux设备树解析:桥接硬件与操作系统的关键架构
在探索Linux的庞大和复杂世界时🌌,我们经常会遇到许多关键概念和工具🛠️,它们使得Linux成为了一个强大和灵活的操作系统💪。其中,"设备树"(Device Tree)是一个不可或缺的部分🌲,尤其是在嵌入式系统🖥️和多平台硬件支持方面🔌。让我们深入了解Linux设备树是什么,它的起源,以及为什么Linux需要它🌳。
Linux设备树解析:桥接硬件与操作系统的关键架构
|
1月前
|
Linux 数据安全/隐私保护 虚拟化
Linux技术基础(1)——操作系统的安装
本文是龙蜥操作系统(Anolis OS) 8.4 的安装指南,用户可以从[龙蜥社区下载页面](https://openanolis.cn/download)获取ISO镜像。安装方法包括物理机的光驱和USB闪存方式,以及虚拟机中的VMware Workstation Pro设置。安装过程涉及选择语言、配置安装目标、选择软件集合和内核,设置Root密码及创建新用户。安装完成后,可通过文本模式或图形化界面验证系统版本,如Anolis OS 8.4,标志着安装成功。
|
15天前
|
Linux
Linux操作系统调优相关工具(三)查看IO运行状态相关工具 查看哪个磁盘或分区最繁忙?
Linux操作系统调优相关工具(三)查看IO运行状态相关工具 查看哪个磁盘或分区最繁忙?
21 0
|
3天前
|
Linux Android开发
Linux(6)CH9434 SPI调试笔记
Linux(6)CH9434 SPI调试笔记
12 0
|
20天前
|
Linux API C语言
FFmpeg开发笔记(一)搭建Linux系统的开发环境
本文指导初学者如何在Linux上搭建FFmpeg开发环境。首先,由于FFmpeg依赖第三方库,可以免去编译源码的复杂过程,直接安装预编译的FFmpeg动态库。推荐网站<https://github.com/BtbN/FFmpeg-Builds/releases>提供适用于不同系统的FFmpeg包。但在安装前,需确保系统有不低于2.22版本的glibc库。详细步骤包括下载glibc-2.23源码,配置、编译和安装。接着,下载Linux版FFmpeg安装包,解压至/usr/local/ffmpeg,并设置环境变量。最后编写和编译简单的C或C++测试程序验证FFmpeg环境是否正确配置。
37 8
FFmpeg开发笔记(一)搭建Linux系统的开发环境
|
4天前
|
机器学习/深度学习 缓存 监控
linux查看CPU、内存、网络、磁盘IO命令
`Linux`系统中,使用`top`命令查看CPU状态,要查看CPU详细信息,可利用`cat /proc/cpuinfo`相关命令。`free`命令用于查看内存使用情况。网络相关命令包括`ifconfig`(查看网卡状态)、`ifdown/ifup`(禁用/启用网卡)、`netstat`(列出网络连接,如`-tuln`组合)以及`nslookup`、`ping`、`telnet`、`traceroute`等。磁盘IO方面,`iostat`(如`-k -p ALL`)显示磁盘IO统计,`iotop`(如`-o -d 1`)则用于查看磁盘IO瓶颈。