首页 > 其他分享 >从源文件到可执行文件

从源文件到可执行文件

时间:2024-02-27 15:55:05浏览次数:25  
标签:可执行文件 文件 代码 源文件 编译器 本地 源代码 CPU

用某种编程语言编写的程序就称为源代码,保存源代码的文件称为源文件。因为源文件是简单的文本文件,所以用 Windows 自带的记事本等文本编辑器就可以编写。CPU 能直接解析并运行的不是源代码而是本地代码的程序。对 CPU 来说,母语就是机器语言,而转换成机器语言的程序就是本地代码。用任何编程语言编写的源代码,最后都要翻译成本地代码,否则 CPU 就不能理解。也就是说,即使是用不同编程语言编写的代码,转换成本地代码后,也都变成用同一种语言(机器语言)来表示了。
本地代码的内容是人类无法理解的。计算机就是把所有的信息作为数值的集合来处理的。计算机指令也是数值的罗列。这就是本地代码。
能够把 C 语言等高级编程语言编写的源代码转换成本地代码的程 序称为编译器。每个编写源代码的编程语言都需要其专用的编译器。将 C 语言编写的源代码转换成本地代码的编译器称为 C 编译器。编译器首先读入代码的内容,然后再把源代码转换成本地代码。编译器中就好像有一个源代码同本地代码的对应表。但实际上,仅仅靠对应表是无法生成本地代码的。读入的源代码还要经过语法解析、句法解析、语义解析等,才能生成本地代码。根据 CPU 类型的不同,本地代码的类型也不同。因而,编译器不仅和编程语言的种类有关,和 CPU 的类型也是相关的。因为编译器本身也是程序的一种,所以也需要运行环境。有一种交叉编译器,它生成的是和运行环境中的 CPU 不同的 CPU 所使用的本地代码。
编译器转换源代码后,就会生成本地文件。不过,本地文件是无法直接运行的。为了得到可以运行的 EXE 文件,编译之后还需要进行“链接”处理。“-W-c”是用来指定编译 Windows 用的程序的选项。选项是对编译器的指示。有时也称为“开关”。编译后生成的不是 EXE 文件,而是扩展名为“.obj”的目标文件 。把多个目标文件结合,生成 1 个 EXE 文件的处理就是链接,运行连接的程序就称为链接器 (linkage editor 或连结器)。
库文件指的是把多个目标文件集成保存到一个文件中的形式。链接器指定库文件后,就会从中把需要的目标文件抽取出来,并同其他目标文件结合生成 EXE 文件。外部符号是指其他目标文件中的变量或函数。通过源代码形式而是通过库文件形式和编译器一起提供的。这样的函数称为标准函数。之所以使用库文件,是为了简化为链接器的参数指定多个目标文件这一过程。通过以目标文件的形式或集合多个目标文件的库文件形式来提供函数,就可以不用公开标准函数的源代码内容。
与此相反,存储着目标文件的实体,并直接和 EXE 文件结合的库文件形式称为静态链接库。静态(static = 静态的)同动态(dynamic = 动态的)是相反的意思。
当程序加载到内存后,除此之外还会额外生成两个组,那就是栈和堆。栈是用来存储函数内部临时使用的变量(局部变量),以及函数调用时所用的参数的内存区域。堆是用来存储程序运行时的任意数据及对象的内存领域。栈及堆的相似之处在于,他们的内存空间都是在程序运行时得到申请分配的。不过,在内存的使用方法上,二者存在些许不同。栈中对数据进行存储和舍弃(清理处理)的代码,是由编译器自动生成的,因此不需要程序员的参与。使用栈的数据的内存空间,每当函数被调用时都会得到申请分配,并在函数处理完毕后自动释放。与此相对,堆的内存空间,则要根据程序员编写的程序,来明确进行申请分配或释放。栈和堆的大小,可以由程序员任意指定。在高级编程语言中,编译器会自动生成指定栈和堆大小的代码,并将其附加到程序中。无论是 C 语言还是 C++,如果没有在程序中明确释放堆的内存空间,那么即使在处理完毕后,该内存空间仍会一直残留。这个现象称为内存泄露 。

标签:可执行文件,文件,代码,源文件,编译器,本地,源代码,CPU
From: https://www.cnblogs.com/duyan123/p/18037030

相关文章

  • makefile 实例: 编译libxyz.so 和 abc可执行文件。
    .PHONY:cleanallalldepall:alldepOBJDIR=Object###libxyx.so###TARGET_LIB_XYZ=libxyz.soTARGET_LIB_XYZ_OUTPUT=$(OBJDIR)/$(TARGET_LIB_XYZ)LDFLAGS+=-ltelux_wlan-lnl-3-lnl-genl-3LDFLAGS+=-L$(SDKTARGETSYSROOT)/lib-L.-rdynamicCFLAGS+=-I$(S......
  • 《程序是怎样跑起来的》第八章——从源文件到可执行文件
    编译(Compilation):首先,程序员使用文本编辑器编写源代码,然后通过编译器将源代码转换为目标代码。编译器会进行词法分析、语法分析、优化和代码生成等步骤,最终生成可执行文件或库文件。链接(Linking):如果程序包含多个源文件或库文件,链接器会将这些文件中的目标代码连接在一起,形成最......
  • 第八章 从源文件到可执行文件
    第八章主要讲述了从源文件到可执行文件的转换过程,即程序的编译和链接。以下是该章节的总结:编译和链接的操作需要使用编译器何链接器来完成,所以本章重点讲述编译器和链接器的功能,介绍了程序从编写到运行的整个过程。计算机只能执行本机代码:源代码是不能直接运行的,因为CPU能直接解......
  • 《程序是怎样跑起来的》读后感——第八章 从源文件到可执行文件
    在读了本章后我受益颇深。因为CPU能,直接解析并运行的不是源代码,而是本地代码,所以计算机只能够直接运行本地代码。由书可知,用某种编程语言编写的程序称为源代码,保存源代码的文件称为源文件,用C语言编写的源文件的拓展名通常是“.c”。Windows中EXE文件的程序内容,使用的就是本地代码......
  • 第八章 从源文件到可执行文件 笔记
    源文件是程序员编写的程序代码,而可执行文件是计算机能够直接运行的机器代码。从源文件到可执行文件的转换过程涉及到编译和链接两个步骤。编译是将源文件中的高级语言代码转换为机器语言代码的过程,而链接则是将多个编译后的机器语言文件合并成一个可执行文件的过程。编译过程是将......
  • 从源文件到可执行文件
    CPU能解释和执行的程序叫本机代码(机器语言代码)。将多个目标文件拼接成一个EXE文件的工具是链接机。扩展名.obj的目标文件的内容是本机代码。由多个目标文件打包而成的文件叫库文件,包含DLL文件中的函数调用信息的文件叫导入库。程序运行时动态分配的内存空间叫堆。对源代码进行编......
  • 《程序是怎样跑起来的》从源文件到可执行文件
    在这一章中,作者矢泽久雄首先为我们介绍了源文件的概念,即程序员使用某种编程语言(如C、C++、Java等)编写的原始代码文件。这些文件通常以文本形式存在,包含了程序的各种逻辑、数据结构以及函数调用等信息。然后,作者详细描述了编译器如何将这些源文件转换为可执行文件的过程。编译过程......
  • 从源文件到可执行文件
    1.计算机只能运行本地代码:CPU能直接解析并运行的不是源代码而是本地代码的程序。作为计算机大脑的CPU也只能解释已经转换成本地代码的程序内容。2.本地代码的内容:用记事本打开由代码清单的内容转换成本地代码得到的EXE文件。每个数值都表示某一个命令或数据,这里我们用的是原始的d......
  • 从源代码到可执行文件
    编写好源文件之后,对源文件进行编译和链接就可以生成可执行文件了。编译和链接的操作需要使用编译器和链接器来完成。不同编译语言所编写的源代码翻译成本机代码之后就成了同一种语言。负责将用C语言等高级语言编写的源代码翻译成本机代码的程序称为编译器,用不同的编译语言编写的源......
  • 从源文件到可执行文件
    源代码:用某种编程语言编写的程序;源文件:保存源代码的文件用C语言编写的源文件的扩展名通常是“.c”。源文件是简单的文本文件,windows自带的记事本即可编写。CPU能直接解释并运行本地代码而不是源代码。用任何编程语言编写的源代码,最后都要翻译成本地代码,否则CPU无法理解,本地......