源程序目标程序可执行程序_什么是源程序和目标程序?

来源:大律网小编整理 2022-06-08 17:13:55 人阅读
导读:首先明确一点,如果真的只有一个源文件,那么是可能可以不用链接器的。之所以即使只有一个源文件仍然需要链接器,一方面通常是因为在你的host环境下生成一个可执行程序...

首先明确一点,如果真的只有一个源文件,那么是可能可以不用链接器的。


之所以即使只有一个源文件仍然需要链接器,一方面通常是因为在你的host环境下生成一个可执行程序需要的不仅仅是你输入的源文件。

有没有想过argc argv谁传给main的?main的返回值又给了谁?程序初始的栈底谁设置的?等。

所以绝大多数环境下,程序的真正起始并不是main,而是被包裹在host相关的start和end(名字不一定)中的,所以需要链接器。

关于这点,你可以把你的可执行文件dump一下,看看有哪些你没见过的符号,section,等。


另一方面,即使是同一源文件内部的引用,很多时候也是不在编译期算的,而是留下relocation交给链接器来解决。虽然local符号可以在编译期算出来,但是考虑到relax,链接优化等问题,交给链接器更好。


再有,如果你调了库,那就更需要链接器来链接库了。


最后,回到第一句,如果以上提到的问题你的源文件都解决了,你是可以由编译器直接生成一个可执行文件而无需链接器的。

可以看后缀名呀。一般C语言的源文件的扩展名是.c 目标文件的扩展名是.obj 可执行文件的扩展名是.exe。 C程序是先由源文件经编译生成目标文件,然后经过连接生成可执行文件。源文件和目标文件一般不能直接运行,要通过编译器转化成可执行文件才能运行。

源程序就是用程序语言编写的未经编译的程序,如C语言写的未编译的程序;汇编程序是用汇编语言写的未编译的程序;可执行程序就是电脑或手机直接能够运行的程序,如PC机的扩展名为.EXE,手机的.APP程序就是可执行程序;它是源程序经编译后成为可执行程序。目标程序就是编译过程用到的源程序或汇编程序。

D 编译。编译程序、解释程序、汇编程序是3种语言处理程序。其区别主要为:汇编程序(为低级服务)是将汇编语言书写的源程序翻译成由机器指令和其他信息组成的目标程序。解释程序(为高级服务)直接执行源程序或源程序的内部形式,一般是读一句源程序,翻译一句,执行一句,不产生目标代码,如BASIC解释程序。编译程序(为高级服务)是将高级语言书写的源程序翻译成与之等价的低级语言的目标程序。编译程序与解释程序最大的区别之一在于前者生成目标代码,而后者不生成;此外,前者产生的目标代码的执行速度比解释程序的执行速度要快;后者人机交互好,适于初学者使用。用COBOL、FORTRAN等语言编写的程序考虑到执行速度一般都是编译执行。

源程序是编程人员编写的,必须由变成人员生成可执行 程序,别人才可以应用。例如你可以点击网页上的查看----》源文件,那就是 用文本语言编制的,而目标程序,是你电脑上的快捷方式连接的.exe 文件,即可执行程序。所以可执行程序是由源文件生成的便于用户使用的文件。

将汇编语言转换成机器语言的过程称为《编译》,编译将源文件生成目标机器可识别的目标代码;将目标代码生成的程序称为《链接》,链接将目标代码生成操作系统可执行的程序。

C

高级语言所编制的程序不能直接被计算机识别,必须经过转换才能被执行,按转换方式可将它们分为两类: 解释类:执行方式类似于我们日常生活中的“同声翻译”,应用程序源代码一边由相应语言的解释器“翻译”成目标代码(机器语言),一边执行,因此效率比较低,而且不能生成可独立执行的可执行文件,应用程序不能脱离其解释器,但这种方式比较灵活,可以动态地调整、修改应用程序。 编译类:编译是指在应用源程序执行之前,就将程序源代码“翻译”成目标代码(机器语言),因此其目标程序可以脱离其语言环境独立执行,使用比较方便、效率较高。但应用程序一旦需要修改,必须先修改源代码,再重新编译生成新的目标文件(* .OBJ)才能执行,只有目标文件而没有源代码,修改很不方便。现在大多数的编程语言都是编译型的,例如Visual C++、Visual Foxpro、Delphi等。

这个过程有两个叫法,编译或者解释。有些高级语言在把源程序转换为可执行程序的时候,需要先对完整的源程序做词法分析、语法分析等一系列检测,所有语法都没有问题后,一次性把所有源代码翻译成机器码,这要求源程序中不能有任何语法错误,否则将不会生成可执行程序,直到所有语法错误都改正,这种转换的方式称为编译,C、C++等语言就是采用了编译方式。还有些高级语言在把源程序转换为可执行程序的时候,一句话一句话的转换,翻译一行执行一行,如果遇到某一行出现了语法错误,程序将停止在出现错误的地方,程序员可以修改,然后继续执行,这种转换方式称为解释,VB、早期的Java都是采用解释方式。两种方式各有利弊,编译的方式对于程序员要求较高,源代码中不能出现任何错误,最终的程序才能执行,但一旦通过了编译,则生成的可执行代码执行效率会很高;而解释方式可以边写代码边调试,但执行的效率较低。

展开原文 ↓

更多 # 相关法律知识

1分钟提问,海量律师解答

  • 1
    说清楚

    完整描述纠纷焦点和具体问题

  • 2
    律师解答

    律师根据问题描述给予专业意见

  • 3
    采纳

    采纳回复意见,确认得到解答

Copyright 2004-2021京ICP备18032441号 有害信息举报:线上咨询律师  线下门店解决问题

Copyright © 2020-2021

在线客服 隐私协议 侵权信息举报