GCC -S选项:编译非汇编文件
我们知道,从 C、C++源代码生成可执行文件需要经历 4 个过程,分别为预处理、编译、汇编和链接。其中,《GCC -E选项:对源程序做预处理操作》一节以 demo.c 源程序文件为例,演示了如何使用 GCC 执行预处理操作,并生成了相应的 demo.i 预处理文件。
[root@bogon demo]# cat demo.c
#include <stdio.h>
int main(){
puts("Hello,World!");
return 0;
}
[root@bogon demo]# gcc -E demo.c -o demo.i
[root@bogon demo]# ls
demo.c demo.i
在此基础上,本节继续讲解如何对已得到的预处理文件进行编译,将其再加工为相应的汇编文件。
gcc -S指令
编译是整个程序构建的核心部分,也是最复杂的部分之一。所谓编译,简单理解就是将预处理得到的程序代码,经过一系列的词法分析、语法分析、语义分析以及优化,加工为当前机器支持的汇编代码。通过给 gcc 指令添加 -S(注意是大写)选项,即可令 GCC 编译器仅将指定文件加工编译阶段,并生成对应的汇编代码文件。例如:
[root@bogon demo]# gcc -S demo.i
[root@bogon demo]# ls
demo.c demo.i demo.s
当然如果需要的话,我们还可以为 gcc -S 指令添加 -o 选项,令 GCC 编译器将编译结果保存在我们指定的文件中。例如:
[root@bogon demo]# gcc -S demo.i -o test.i
[root@bogon demo]# ls
demo.c demo.i demo.s test.i
需要注意的是,gcc -S 指令操作的文件并非必须是经过预处理后得到的 .i 文件,-S 选项的功能是令 GCC 编译器将指定文件处理编译阶段结束。这也就意味着,gcc -S 指令可以操作预处理后的 .i 文件,也可以操作源代码文件:
如果操作对象为 .i 文件,则 GCC 编译器只需编译此文件;
如果操作对象为 .c 或者 .cpp 源代码文件,则 GCC 编译器会对其进行预处理和编译这 2 步操作。
因此,如果我们想直接得到 demo.c 文件对应的汇编文件,就可以借助 gcc -S 指令:
[root@bogon demo]# gcc -S demo.c -o demo.s
[root@bogon demo]# ls
demo.c demo.s
由此,我们就可以直接获得 demo.c 对应的 demo.s 汇编文件。对于最终生成的 .s 汇编文件,感兴趣的读者可执行 cat demo.s 指令查看文件中的内容。在此基础上,如果想提高文件内汇编代码的可读性,可以借助 -fverbose-a 选项,GCC 编译器会自行为汇编代码添加必要的注释,例如:
[root@bogon demo]# gcc -S demo.c -fverbose-a
- 随机文章
- 马尔代夫黄冈分夫(黄冈分夫:马尔代夫上美丽的天堂岛)
- 马尔代夫罐头品牌(马尔代夫罐头品牌的新:马尔代夫罐头-品质保证)
- 平潭马尔代夫岛屿(福建平潭开发区将建马尔代夫度假岛屿)
- 许晴 马尔代夫(许晴赴马尔代夫度假成为话题)
- 小 马尔代夫 盐湖(探秘马尔代夫神秘的盐湖之旅,全方位揭秘!)
- 江苏 马尔代夫(江苏多个旅游厅商议 马尔代夫旅游)
- 航拍南宁马尔代夫(南宁马尔代夫风光无限,航拍壮美景色)
- 广东马尔代夫机票(广东前往马尔代夫的机票,超值特惠!)
- 代办马尔代夫护照(马尔代夫办理护照:你需要知道的事情)
- 烟台马尔代夫美图(烟台:无需出国也能享受马尔代夫美景)
- 马尔代夫东莞疫情(马尔代夫爆发新冠病例,东莞多人确诊)
- 洛阳马尔代夫钓鱼(洛阳打造“马尔代夫钓鱼”旅游新热点)
- 飞机飞到马尔代夫(飞往天堂:探索环形礁的马尔代夫之旅)
- 香香假期马尔代夫(“享受轻奢假期,探索马尔代夫之美”)
- 徐州 马尔代夫(徐州有没有世外桃源?马尔代夫滩涂遇海!)
- 预定马尔代夫蜜月(浪漫马尔代夫:新婚夫妇的完美度假地)
- 新塘 马尔代夫(新塘旅行社推出马尔代夫行程,走起!)
- 马尔代夫亚洲简介(探索马尔代夫:亚洲最独特的海岛国家)
- 飞往马尔代夫飞机(马尔代夫等您来!航空公司启程直飞!)
- 马尔代夫免费阅读(马尔代夫免费阅读,让你独享私人海岛)
- 微信 马尔代夫(马尔代夫将恢复对所有旅客开放,无须隔离期!)
- 马尔代夫古来德湖(马尔代夫的古来德湖:清澈如镜的天堂)
- 马尔代夫场景婚庆(浪漫之地马尔代夫,梦幻婚礼在此实现)
- 马尔代夫地狱之旅(从天堂到地狱:探秘马尔代夫真实面貌)
- 马尔代夫与乌克兰(马尔代夫和乌克兰签署协议,加强合作)
- 南宁 至马尔代夫(南宁飞往马尔代夫,悠闲度假首选)
- 婴儿 马尔代夫(后的新:小宝宝在美丽的马尔代夫度过了难忘的时光)
- 马尔代夫国旗贴纸(马尔代夫推出国旗贴纸,民众热情购买)
- 马尔代夫万豪艾美(马尔代夫万豪艾美酒店:奢华度假天堂)
- 马尔代夫居民街拍(马尔代夫当地人的日常生活:街头拍照)
