首页 > 编程知识 正文

cmd编译c语言,gcc把c语言编译为汇编

时间:2023-05-04 22:39:19 阅读:34744 作者:1124

GCC(GNUcompilercollection,GNU编译器工具包)是GNU开发的编程语言编译器。 GNU编译器工具包包含c、c、Objective-C、Fortran、Java、Ada和Go语言的前端,以及这些语言的库(如libstdc和libgcj )。 此外,Gcc是一种跨平台编译器,可以在当前的CPU平台上为多个不同体系结构的硬件平台开发软件,因此特别适用于嵌入式领域的开发编译。

Gcc的编译过程分为以下四个步骤。

预处理(预处理) :处理有关“#”的指令。 #标记可以说是预处理的标志。 编译器编译代码中的. h文件,如stdio.h。

用户可以使用Gcc中的“-E”选项查看。 此选项可使Gcc在预处理结束后停止编译过程。 编译(Compiling )1.扫描)词法分析)2.语法分析,3 .语义分析,4 .源代码优化)中间语言生成)5.代码生成,目标代码优化。 在这个阶段,Gcc首先检查代码的正确性、有无语法错误等,确定代码的实际工作,检查无误后,Gcc将代码翻译成汇编语言。

用户可以使用“-S”选项查看。 此选项只进行编译,不进行汇编就生成汇编代码。 汇编(Assembling ) :将汇编代码转换为可执行指令并生成所需的文件。 汇编阶段将在编译阶段生成的“. s”文件转换为目标文件。 读者在此处使用选项“-c”可以看到程序集代码已转换为“. o”的二进制目标代码。 通过“链接”(Linking )编译器的五个步骤后,我们获得了目标代码,但其中的每个地址都尚未确定,没有分配空间。

链接过程包括地址和空间分配、符号确定和重新定位。 gcc总语句: gcc main.c此时,gcc默认对. c文件执行预处理操作,并默认生成a.out文件; 通过运行./a.out,可以运行out文件。 也就是说,c文件的gcc编译和输出完成

(注: Linux不使用文件扩展名区分可执行文件。 Linux下的可执行文件扩展名在理论上是任意的。 此处的. out仅用于指示它是GCC的输出文件。 无论源文件的名称如何,GCC生成的可执行文件的默认名称始终为a.out。 同样,可执行文件可以是不带后缀,因为在Linux上可执行文件的后缀只是形式

. /表示当前目录,这意味着整个命令将运行当前目录下的a.out程序。 如果不写.//,Linux将查找a.out至系统路径下,但运行失败,因为很明显系统路径下不存在此程序。

系统路径:由环境变量指定的路径。 可以通过修改环境变量来添加自己的路径或删除路径。 在许多情况下,Linux命令与可执行程序相对应。 如果在运行命令时未指定路径,请在系统路径下查找相应的程序。

-c表示要编译、汇编以获取. o文件。

通过在gcc -o hello hello.o中链接. o文件,可以获得可执行的APP应用程序

GCC最基本的使用方法是(gcc [options] [filenames]

其中,options是编译器所需的参数,filenames提供相关的文件名。

后缀功能-c只是编译,不链接到可执行文件。 编译器只需根据输入的源文件(如. c )生成. o为后缀的目标文件,通常用于编译不包含主程序的子程序文件。 -o output_filename确定输出文件的名称为output_filename,且不能与源文件同名。 如果不指定此选项,gcc将指定缺省可执行文件a.out。 必须添加此选项,才能生成-g符号调试工具(GNU中的gdb )所需的符号信息并调试源代码。 -O优化程序并编译、链接。 使用此选项,可以在编译和链接期间优化整个源代码。 这样可以提高生成的可执行文件的执行效率,但编译、链接的速度相应变慢。 -O2比-O更能优化编译、链接。 当然,整个编译、链接过程都会变慢。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。