gpt4 book ai didi

c++ - 什么是Delphi DCU文件?

转载 作者:IT老高 更新时间:2023-10-28 22:33:29 25 4
gpt4 key购买 nike

什么是Delphi DCU文件?

我相信它代表“Delphi编译单元”。我是否假设它包含目标代码,因此对应于从C/C++源代码文件编译的“.o”文件,对吗?

最佳答案

我相信.dcu通常是“Delphi编译单元”,而不是.pas文件,后者只是“Pascal源代码”。

.dcu文件是DCC编译器在编译.pas文件后生成的文件(.dfm文件转换为二进制资源,然后由链接程序直接处理)。

它类似于其他编译器生成的.o.obj文件,但包含有关符号的更多信息(因此reverse engineer the interface section of a unit from it可以省略注释和编译器指令)。

从技术上讲,.dcu文件不是“缓存”文件,尽管如果不删除它们并且不需要重新编译它们,则它们将运行得更快。 .dcu文件与生成该文件的编译器版本相关。从这个意义上讲,它不如.o或.obj文件可移植(尽管它们也存在兼容性问题)

这是一些历史记录以防万一。

编译器通常将源代码语言翻译成某种中间形式。口译员不会这么做-他们只是直接解释语言并立即运行应用程序。 BASIC是解释语言的经典示例。在DOS和Windows中,“命令行”具有一种语言,可以将其写在扩展名为.bat的名为“batch files”的文件中。但是,在命令行上键入内容将直接执行它们。在* nix环境中,有一堆不同的命令行解释器(CLIs),例如shcshbashkshand so on。您可以从所有文件中创建批处理文件-通常称为“脚本语言”。但是现在还有很多其他语言都可以解释和编译。

无论如何,Java.Net都可以编译成称为“byte-code”中间表示的内容。

Pascal最初是written as a single-pass compiler,而Turbo Pascal(起源于PolyPascal)(具有CP/MCP/M-86DOS的不同版本)直接生成了在这些操作系统下运行的二进制可执行文件(COM)。

Pascal最初被设计为一种小型,高效的语言,旨在鼓励使用结构化编程和数据结构的良好编程习惯。 Turbo Pascal 1最初设计为具有内置快速编译器的IDE,是DOS和CP/M市场上价格合理的竞争者,当时它的编辑/编译/链接周期很长。 Turbo Pascal和Pascal在当时具有与任何编程环境类似的局限性:内存和磁盘空间以kilobytes进行度量,处理器速度以Megahertz进行度量。

链接到可执行二进制文件使您无法链接到单独编译的单元和库。

在Turbo Pascal之前,有UCSD p-System操作系统(支持许多语言,包括Pascal。UCSDPascal编译器当时已经使用单位扩展了Pascal语言),该操作系统被编译成伪机字节码(称为p代码)格式,允许将多个单元链接在一起。不过很慢

同时,cVAXUnix环境中发展,并编译成.o文件,即“目标代码”而不是“源代码”。注意:这与我们今天称为“objects”的任何内容完全无关。

Turbo Pascal可以升级到并包括第3版直接生成的.com二进制输出文件(尽管您可以使用这些覆盖文件进行修改),并且从第4版开始,支持将代码分成多个单元,这些单元首先编译成.tpu文件,然后链接到最终的可执行二进制文件。 Turbo C编译器生成.obj(目标代码)文件而不是字节码,并且Delphi 2引入了.obj文件生成以便与C++ Builder合作。

目标文件在每个单元中使用相对寻址,并且稍后需要使用所谓的“修复程序”(或relocation)来使它们运行。修补程序指向其他对象文件或库中应该存在的符号标签。

有两种“修复程序”:一种是通过称为“linker”的工具静态完成的。链接器获取一堆目标文件,并将它们缝合在一起,类似于拼布被子。然后,它通过插入指向所有外部定义标签的指针来“修复”所有相对引用。

当程序加载运行时,第二次修复是动态完成的。它们是由称为“加载程序”的东西完成的,但是您从未看到过。在命令行上键入命令时,将调用loader将EXE文件加载到内存中,根据文件的加载位置修复其余的链接,然后将控制权转移到应用程序的入口点。

因此,当Borland在Turbo Pascal中引入单位时,.dcu文件最初是.tpu文件,然后随着Delphi的引入更改了扩展名。它们与.obj文件有很大的不同,尽管您可以从Turbo Pascal和Delphi链接到.obj文件。

Delphi还完全隐藏了链接器,因此您只需编译并运行即可。但是,所有链接器设置仍在Delphi的选项 Pane 之一中。

关于c++ - 什么是Delphi DCU文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24665856/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com