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

从源文件到可执行文件

时间:2024-02-21 21:33:27浏览次数:22  
标签:可执行文件 文件 EXE 代码 源文件 编译器 源代码 链接

       对于本章,首先我们需要了解源代码和源文件,用某种编程语言编写的程序,就是源代码保存源代码的文件就是源文件,而且用C语言编写的源文件的扩展名通常是".c"。但若想要程序运行还需要将源代码转换成本地代码,因为计算机的"大脑"CPU能直接解析的是本地代码。既然我们知道了,要转换成本地代码,那么本地代码的内容到底是什么呢?其实就是各种数值的罗列,而每个数值都表示某一个命令或数据。那么是什么负责转换源代码为本地代码的呢?就是编译器,它能够把C语言等高级编程语言编写的源代码转换成从本地代码的程序,而因CPU类型的不同,本地代码类型的不同,以及运行环境不同所需要的编译器也是不同的。另外还有一种交叉编译器,它生成的是和运行环境中CPU不同的CPU所使用的本地代码。 但编译器转换源代码后得到的目标文件,目标文件中是本地代码,但却无法直接运行,因此,还需要把多个目标文件结合生成一个EXE文件处理(也称为链接处理),而运行链接的程序就称为链接器。进行链接处理(链接器指定库文件后把需要的目标文件抽取出来再同其他目标文件结合生成EXE文件。其中库文件指的是把多个目标文件集成保存在一个文件中的形式)之后就要和启动结合起来,也就是目标文件记述的是同所有程序起始位置相结合的处理内容。此外,我们还需要知道外部符号指的是其他目标文件中的变量或者函数,标准函数是指通过库文件形式和编译器一起提供的。

        API:以函数的形式为应用提供了各种功能,其目标文件是存储在名为DLL文件的特殊库文件中。

        DLL文件:是程序运行时动态结合的文件。 静态链接库:存储捂着目标高文件的实体并直接和EXE文件结合的库文件。

        再配置信息:链接器在EXE文件的开头追加转换内存地址所需要的必要信息。 在EXE文件中变量和函数的内存地址的值是如何来的?是EXE文件中给变量及函数分配了,虚拟的内存地址。

       程序加载时会生成栈和堆。栈:用来存储函数内部临时使用的变量,以及含数调用时所用的参数的内存区域。堆:用来存储程序运行时的任意数据集对象的内存领域。两者的相似之处:它们的内存空间都是在程序运行时得到申请分配的。不同之处:栈对数据进行存储和舍弃代码是由编译器自动生成的,不需要程序员的参与,因此,每当函数被调用时都会得到申请分配并在函数处理完毕之后自动释放,而堆则需要根据程序员编写的程序来名确进行申请分配或者释放。 内存泄露:没有在程序中明确释放堆的内存空间,即使在处理完毕后,该内存空间仍会一直残留的现象。

      补充:1、编译器是在运行前对所有源代码进行解释处理,而且解释器是在运行时对源代码进行解释处理。2、分割编译指的是将整个程序分为多个源代码来编写,然后分别进行编译,最后链接成一个EXE文件。3、Build指的是连续执行编译和链接。4、使用DLL文件的好处:可以节约内存和磁盘。 对函数内容进行修正时更加简便。

标签:可执行文件,文件,EXE,代码,源文件,编译器,源代码,链接
From: https://www.cnblogs.com/G-y-l-123/p/18026258

相关文章

  • 《程序是怎样跑起来的》——第8章 从源文件到可执行文件
    一、代码1、源代码完成后,就可以编译生成可执行文件了。负责实现该功能的是编译器2、代码运行:计算机只能运行本地代码。3、源代码和源文件:用某种编程语言编写的程序就称为源代码,保存源代码的文件称为源文件。(这里的“源代码”用英文表示是“sourcecode”。source有“原始的”......
  • 对于可执行文件的产生和运行过程的认知(《程序时怎样跑起来的》第8章)
    在阅读《程序时怎样跑起来的》第八章后,我认识到了源文件变为可执行文件的过程,包括必备的因素和运行的条件。源文件指的是程序员利用高级语言写的代码文件,而在第七章中提到,CPU能识别的是本地代码也叫机器语言,而源文件到本地代码的过程就叫做“编译”,通常利用对应语言的编译器进行编......
  • 《程序是怎样跑起来的》第八章:从源文件到可执行文件
    在这一章中,作者详细地解释了如何将源代码转化为可执行文件,这个看似简单的讨程实际上包含了多个复杂的步骤。源代码,作为程序的起点,虽然已经包含了实现特定功能的代码,但它本身并不能直接运行。为了让它能在计算机上运行,需要经过一系列的编译和链接过程。这包括词法分析、语法分析、......
  • 源文件到可执行文件的过程
    从用户编写的源文件到生成可执行程序,需要经过以下四个中间过程:预处理:预处理过程主要处理源代码文件中的#include、#define、#if、#else、#ifdef、#endif等指令,以及处理注释、行号(用于调试)等工作。编译:编译是构建可执行程序过程中最重要的步骤,涉及词法分析、语法分析、语义分析......
  • 第八章——从源文件到可执行文件
    本章讲解的是源文件如何通过编译转换为可执行文件的。首先计算机只能运行本地代码。用某种编程语言编写的程序就称为源代码,保存源代码的文件被称为源文件。源代码是无法直接运行的,因为CPU能直接解析和运行的不是源代码而是本地代码。本地代码的内容就是各种数值的罗列。编译器负......
  • java的getResource方法 总结一下 在Java中获取资源的时候,经常用到getResource和getRes
    java的getResource方法总结一下在Java中获取资源的时候,经常用到getResource和getResourceAsStream,本文总结一下这两种获取资源文件的路径差异1.前言在Java中获取资源的时候,经常用到getResource和getResourceAsStream,本文总结一下这两种获取资源文件的路径差异。2.Class.get......
  • 第八章:从源文件到可执行文件
    在《程序是怎样跑起来》的第八章中,作者详细介绍了程序从源文件到可执行文件的整个过程。这一章节通常涉及到编译原理和链接技术,对于理解程序的生命周期和执行过程至关重要。以下是我对这一章节的读后感:首先,本章可能从源代码的编写开始,介绍了编程语言的基本概念。源代码是人类可读......
  • 在windows下打包linux可执行文件
    尝试set命令设置环境变量,然后执行打包,但是打包出来还是windows文件命令行直接设置:在运行 gobuild 命令之前,在同一命令行窗口中先设置环境变量,并确保在同一行内设置以确保它们在同一环境中生效CGO_ENABLED=0GOOS=linuxGOARCH=amd64gobuild-omyapp-linux-amd64main.go......
  • 【WPF】Xaml调用.resx资源文件,多语言翻译
    参考文章:https://blog.csdn.net/u010839204/article/details/103932044本文在该文章的基础上进行了“改进” 这个是基类库,基本处理均在基类库里面完成。须注意StringResources.resx名字和StringResourcesExtension前部分名字须保持一致。类 StringResourcesExtension:nam......
  • 关于extern和模块化编程全局变量、函数、对象不同源文件之间的使用说明
    extern的使用在C语言中,extern关键字用于在多个源文件之间声明全局变量、函数或对象,实现模块间的交互和数据共享。即告诉编译器该变量或函数是在其他源文件中定义的,并且可以在当前源文件中使用。而局部函数的作用域限定在其定义所在的作用域内,无法被其他源文件直接访问或调用。因......