文章插图
文章插图
带你到幕后看看生成二进制文件的步骤,让你知道在出现一些错误的时候如何一步步解决问题 。
c语言广为人知,深受新老程序员的喜爱 。用C语言写的源代码,用的是标准的英文术语,所以人们读起来很容易 。然而,计算机只能理解二进制代码 。为了将代码转换成机器语言,你需要使用一个叫做编译器的工具 。
最常见的编译器是GCC(GNU编译器集合) 。编译过程包括一系列中间步骤和相关工具 。
安装 GCC
要验证您的系统上是否安装了gcc,请使用GCC命令:
$ GCC – version如果需要,使用您的软件包管理器来安装GCC 。在基于Fedora的系统上,使用dnf:
$ sudo dnf在基于Debian的系统上安装gcc libgcc,使用apt:
在安装了$ sudo apt install build-essential之后,如果你想检查GCC的安装位置,那么使用:
$ whereis gcc演示了用gcc编译一个简单的C程序 。下面是一个简单的C程序,演示如何用GCC编译 。打开您最喜欢的文本编辑器,将以下代码粘贴到其中:
// hellogcc.c#include将文件另存为hellogcc.c,然后编译它:
$ lshellogcc . c $ gcc hello gcc . c $ ls-1a.outhellogcc . c可以看到,a . out是编译后默认生成的二进制文件 。要查看新编译的应用程序的输出,只需运行它,就像运行任何本地二进制文件一样:
$ ./a.outHello,GCC!将输出文件名命名为a.out非常令人费解,因此如果您想要指定可执行文件的名称,可以使用-o选项:
(LCTT:注意,这与最近被放弃的Linux内核的a.out格式无关,但名字是一样的 。这里生成的a.out是ELF格式的——不知道是谁给的蠢名字A.out,在我看来默认输出文件名应该是去掉了 。c扩展 。由wxy)
$ gcc-o hello gcc hello gcc . c $ LSA . out hello gcc hello gcc . c $ 。/hellogccHello,GCC!当开发需要编译多个C源文件的大型应用程序时,此选项非常有用 。
在 GCC 编译中的中间步骤
编译实际上有四个步骤,即使GCC在一个简单的用例中自动执行这些步骤 。
预处理Pre-Processing:GNU 的 C 预处理器(cpp)解析头文件(#include语句),展开 宏macros 定义(#define语句),并使用展开的源文件代码来生成一个中间文件,如hellogcc.i 。编译Compilation:在这个期间中,编译器将预处理的源文件代码转换为指定 CPU 架构的汇编代码 。由此生成是汇编文件使用一个 .s扩展名来命名,如在这个示例中的hellogcc.s 。汇编Assembly:汇编程序(as)将汇编代码转换为目标机器代码,放在目标文件中,例如hellogcc.o 。链接Linking:链接器(ld)将目标代码和库代码链接起来生成一个可执行文件,例如hellogcc 。
运行GCC时,可以使用-v选项查看每个步骤的详细信息:
$ gcc -v -o hellogcc hellogcc.c手动编译代码
体验编译的每个步骤可能是很有用的,因此在一些情况下,你不需要 GCC 完成所有的步骤 。$ GCC -v -o hellogcc hellogcc.c体验编译的每一步都会非常有用,所以在某些情况下,你不需要GCC来完成所有的步骤 。
首先,删除当前文件夹下生成的文件,源文件除外 。
$ RM a . out hello gcc . o $ lshello gcc . c预处理程序首先,启动预处理程序并将其输出重定向到hellogcc.i:
$ cpp hellogcc.c & gtHello gcc . I $ lshellogcc . c Hello gcc . I查看输出文件,注意预处理器如何在头文件和扩展宏中包含源代码 。
编译器
现在,您可以将代码编译成汇编代码 。使用-S选项设置GCC只生成汇编代码:
- 中国古代宫女是如何应对"例假期"的?
- 如何使用打印机打印 如何使用打印机
- 面试时,如何做好3分钟自我介绍?
- 小青龙不马上吃如何保存
- 关于盘他是什么梗的信息
- 在文景二帝时期,西汉国力究竟是如何显著增强的?
- 烤红薯用烤盘烤还是直接放在烤架 烤红薯用烤盘还是烤网
- 北京自采暖补贴如何领取 北京自采暖补贴如何发放2022
- 苹果手机如何拦截骚扰电话和广告推销电话 苹果手机如何拦截淘宝短信
- 如何快速缓解隔夜酒 快速缓解隔夜酒