【Linux系列笔记】---------g++/gcc应该这样学!(六)

作者:嵌入式历练者
ID : Eterlove
记下相关笔记,记录我的学习生活!站在巨人的肩上Standing on Shoulders of Giants!
该文章为原创,转载请注明出处和作者:https://blog.csdn.net/Eterlove/article/details/120929816

1.g++/gcc的区别

【!】gcc
认为预处理后的文件(.i)是 C 文件,并且设定 C 形式的连接.
【!】g++
认为预处理后的文件(.i)是 C++文件,并且设定 C++形式的连接.

2.程序的编译过程

  • 严格来说,源程序经过预处理(preprocessing), 编译(compilation), 汇编 (assembly),链接(linking)四个阶段生成可执行文件(a.out/a.exe)
  • 在windows上生成可执行文件a.exe,而在Linux上生成a.out。当然你可以重新起个名字。
    先来看这段代码,现在Linux上编译这个hello.c这个源文件,并生成可执行文件。
gcc hello.c -o www
这段代码告诉编译器编译hello.c文件,并生成一个名为www的可执行文件
-o是参数,给生成的文件起一个自己想要的名字,格式:-o 文件名(中间有个空格)
当然,-o参数位置可变,例如
gcc -o www hello.c

3.谈谈源文件后缀名

这个来自于Gcc手册,目前也有热心网友中文翻译的,中文有疑惑的以Gcc英文为准。
源文件后缀名指出语言种类以及后期的操作
.c C 源程序;预处理,编译,汇编
.C C++源程序;预处理,编译,汇编
.cc C++源程序;预处理,编译,汇编
.cxx C++源程序;预处理,编译,汇编
.m Objective-C 源程序;预处理,编译,汇编
.i 预处理后的 C 文件;编译,汇编
.ii 预处理后的 C++文件;编译,汇编
.s 汇编语言源程序;汇编
.S 汇编语言源程序;预处理,汇编
.h 预处理器文件;通常不出现在命令行上


.o 目标文件(Object file)
.a 归档库文件(Archive file)

4.掌握基本命令

接下来我们先来写个超简单的代码:
创建一个hello.c,在vim编辑器写下hello代码

[root@localhost home]# ls
cheng
[root@localhost home]# touch hello.c
[root@localhost home]# vi hello.c
[root@localhost home]# gcc hello.c
[root@localhost home]# ls
a.out  cheng  hello.c
[root@localhost home]# ./a.out
hello
#include"stdio.h"
int main()
{
printf("hello\n");
return 0;
}

如上所知,在没有加上参数-o,默认生成了a.out,执行文件a.out输出得到hello
【参数】-o filename 指定输出的文件为filename
我们继续这段代码,给编译后生成的可执行文件起个名字www

gcc hello.c -o www
或gcc -o www hello.c

[root@localhost home]# gcc -o www hello.c
[root@localhost home]# ls
a.out  cheng  hello.c  www
[root@localhost home]# ./www
hello

【参数】-E 预处理后即停止,不进行编译.预处理后的代码送往标准输出
可以使用-o 选项选择其他名字.
我们来看看只经过预处理阶段的代码:

gcc -E hello.c -o pre
当然你也能这样gcc -o pre -E hello.c
cat pre

验证命令是否正确,没有比自己亲手去试一试更好的方法!
用cat指令查看pre文件内容(不为只预处理后文件起个名字,它将在终端显示出来)
在这里插入图片描述

【参数】-S注:大写) 编译后即停止,不进行汇编.对于每个输入的非汇编语言文件,输出文件是汇编语言文件,可以使用-o 选项选择其他名字。

[root@localhost home]# gcc -o pre -E hello.c
[root@localhost home]# gcc -S hello.c
[root@localhost home]# ls
a.out  cheng  hello.c  hello.s  pre  www
cat hello.s

在这里插入图片描述
这段汇编代码对于汇编程序员很熟悉。
【注意-s(小写的s)】
经过验证,发现gcc -s www.c会在没有指定文件名的情况下直接生成a.out可执行文件(Linux),跟gcc www.c结果一致。

【参数】-c 汇编源文件,但是不作连接.简单说就是完成前三个阶段,生成.o文件不做链接,编译器输出对应于源文件的目标文件,可以使用-o 选项选择其他名字。

[root@localhost home]# gcc -c hello.c
[root@localhost home]# ls
a.out  cheng  hello.c  hello.o  hello.s  pre  www
[root@localhost home]# vi hello.o

当你用vi编辑器打开hello.o时,你会发现看不懂,看不懂就对了,那是给机器看的机器码,只是未进行链接生成可执行文件。
在这里插入图片描述
这些基本命令学会就够用了,若遇到其他的会查Gcc手册就行,如果需要Gcc中文手册,评论区@我,以前还有上传免费资源,现在平台没有了,所以需要的私信我就可以了。

  • 29
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 38
    评论
评论 38
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

嵌入式历练者

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

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

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

打赏作者

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

抵扣说明:

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

余额充值