IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> Linux系统下的gcc操作 -> 正文阅读

[系统运维]Linux系统下的gcc操作

目录

一、一次性编译

1、新建、编辑源文件

2、生成可执行程序

3、运行可执行程序

4、完整演示

二、分两步编译

1、编译(Compile)

2、链接(Link)

3、完整演示

三、分四步编译

1、预处理(.i)

2、编译(.s)

3、汇编(.o)

???? 合三为一

4、链接(.out)

?完整演示


?一、一次性编译

在Linux上编译.c文件并非直接生成.out文件(Windows上为.exe),中间还经历了预处理、编译、汇编、链接四个过程,好在gcc提供了生成中间文件的指令。

1、新建、编辑源文件

  • 首先,建个名为“测试”的文件夹,cd进入文件夹
  • 接下来用touch在文件夹内创建一个空白的 hello.c 源文件(hello.c 其实就是一个纯文本文件,并没有任何特殊格式)
  • 再用gedit编辑源文件
$ cd 测试         #进入"测试"目录,这是源文件所在的目录
$ touch hello.c  #使用touch命令创建一个名为hello.c的空文件
$ gedit hello.c  #使用gedit命令编辑hello.c

终端操作如下:

gedit命令后将会出现一个面板,我们输入程序:

保存文件后就完成了源代码的编辑工作。

2、生成可执行程序

最简单的生成可执行文件的写法为:

$ cd 测试       #进入源文件所在的目录

$ gcc hello.c  #在gcc命令后面紧跟源文件名

这时打开“测试”目录,会看到多了一个名为 a.out 的文件,这就是最终生成的可执行文件,这样就一次性完成了编译和链接的全部过程

注意:Linux不以文件后缀来区分可执行文件,Linux下的可执行文件后缀理论上可以是任意的,这里的.out只是用来表明它是 GCC 的输出文件不管源文件的名字是什么,GCC 生成的可执行文件的默认名字始终是a.out

如果不想使用默认的文件名,可以通过-o自定义文件名

$ gcc hello.c -o hello.out

这样生成的可执行程序的名字就是hello.out:

因为Linux下可执行文件的后缀仅仅是一种形式上的,所以可执行文件也可以不带后缀,例如:

$ gcc hello.c -o hello

这样生成的可执行程序的名字就是hello:

通过-o也可以将可执行文件输出到其他目录,并不一定非得在当前目录下:

$ gcc hello.c -o ./ccc/hello.out (./表示当前目录,如果不写默认也是当前目录)
或
$ gcc hello.c -o ccc/hello.out

上面的指令表示:将可执行文件输出到当前目录下的子目录ccc中,并命名为hello.out(ccc目录必须存在)

3、运行可执行程序

$ ./a.out

./表示当前目录,整条命令的意思是运行当前目录下的 a.out 程序

注意:如果不写./,Linux会到系统路径下查找 a.out,而系统路径下不存在这个程序,所以会运行失败

运行结果:

4、完整演示

$ cd 测试 ? ? ? ? ? ?? #进入源文件所在目录(cd)

$ touch hello.c ?? #新建源文件(touch)

$ gedit hello.c???? #编辑源文件(gedit)

$ gcc hello.c?????? #生成可执行程序(紧跟)

$ ./a.out?????????????? #运行可执行程序

HELLO GCC


二、分两步编译

1、编译(Compile)

-c源文件(.c)编译成目标文件(.o)

gcc -c hello.c

就将 hello.c 编译为 hello.o。打开"测试"目录,就会看到它:

如果希望自定义目标文件的名字,那么可以使用-o选项,例如:

gcc -c hello.c -o HELLO.o

2、链接(Link)

在gcc命令后紧跟目标文件的名字,就可以目标文件(.o)链接成可执行文件(.out)

gcc hello.o

就将hello.o 链接为 a.out,打开目录就会看到 a.out。

使用-o选项仍然能自定义可执行文件的名字:

gcc hello.o -o HELLO.out

这样生成的可执行文件的名字就是 HELLO.out

3、完整演示

$ cd 测试???????????????? #进入源文件所在目录(cd)

$ gcc -c hello.c? ? ? #编译源文件为目标文件(-c)

$ gcc hello.o??? ?? ?? #链接目标文件为可执行文件(紧跟)

$ ./a.out?????????????? ?? #运行可执行程序

HELLO GCC


三、分四步编译

1、预处理(.i)

这个阶段输入.c源文件,主要处理文件中的带“#”的语句,将要包含(include)的文件插入原文件中、将宏定义展开、根据条件编译命令选择要使用的代码,最后将这些代码输出到一个“.i”文件中等待进一步处理:

gcc -E hello.c -o hello.i

2、编译(.s)

这个阶段输入第一阶段生成的 .i 文件,输出成汇编语言 .s 文件

gcc -S hello.i -o hello.s

3、汇编(.o)

这个阶段输入第二阶段的汇编文件 .s 文件,然后编译成机器语言 .o 文件,在Linux系统上一般表现为ELF目标文件(OBJ文件):

gcc -c hello.s -o hello.o

合三为一

以上三个阶段可以合为一:gcc –c hello.c –o hello.o(即上面的两步编译)

4、链接(.out)

这个阶段输入第三步输出的机器文件 .o? ,将汇编生成的OBJ文件、系统库的OBJ文件、库文件链接起来,最终生成可以在特定平台运行的可执行程序:

gcc hello.o –o hello.out

完整演示

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-03-24 00:59:27  更:2022-03-24 01:02:57 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 23:43:51-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码