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

完整演示

  • 5
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

颜 然

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值