mag*_*nus 14 c c++ delphi compilation dcu
什么是Delphi DCU文件?
我相信它代表"Delphi Compiled Unit".假设它包含目标代码,我是否正确,因此对应于从C/C++源代码文件编译的".o"文件?
Dav*_*rtz 25
.dcu文件是DCC编译器在编译.PAS/.DFM文件后生成的文件.
它类似于其他编译器生成的.o和.obj文件.
我相信.DCU通常意味着"Delphi编译单元"而不是.PAS文件,它只是"Pascal源代码".
它在技术上不是一个"缓存"文件,虽然如果你不删除它们并且不需要重新编译它们,你的构建将运行得更快.
这是一些历史记录,以防它添加任何东西.
编译器传统上将源代码语言翻译成某种中间形式.口译员不这样做 - 他们只是直接解释语言并立即运行应用程序.BASIC是解释语言的经典例子.DOS和Windows中的"命令行"有一种语言,可以用称为"批处理文件"的文件编写,扩展名为.BAT.但是在命令行输入内容直接执行它们.在*nix环境中,有许多不同的命令行解释器(CLI),例如sh,csh,bash,ksh等.您可以从所有这些文件创建批处理文件 - 这通常称为"脚本语言".但现在有很多其他语言都被解释和编译.
无论如何,Java和.Net编译成一种称为"字节码"的表示.
Pascal最初是作为单通道编译器编写的,它直接生成一个在DOS下运行的可执行文件(COM或EXE).(Pascal最初是为学术目的而设计的,用于教授编程,而不是构建大型应用程序.因此,它的局限性在这方面是有意的.)
该过程阻止您链接到单独编译的单元和库.UCSD Pascal出现并通过编译为允许将多个单元链接在一起的字节码格式来纠正问题.
同时,c在VAX和Unix环境中发展,并编译成.o文件,这意味着"目标代码"被选为"源代码".注意:这与我们今天称之为"对象"的任何内容完全无关.
TurboPascal出现了,如果我没弄错的话,生成.obj(目标代码)文件而不是字节码.
对象文件在每个单元中使用相对寻址,并且稍后需要所谓的"修复"来使它们运行.修复指向预期存在于其他目标文件或库中的符号标签.
有两种"修复方法":一种是通过一种称为"链接器"的工具静态完成的.链接器接受一堆目标文件并将它们连接成类似于拼凑被子的东西.然后通过插入指向所有外部定义标签的指针来"修复"所有相关引用.
第二个修复程序在程序加载运行时动态完成.他们是通过一种叫做"装载机"的东西来完成的,但你从来没有看到过.在命令行上键入命令时,将调用加载程序将EXE文件加载到内存中,根据加载文件的位置修复剩余的链接,然后将控制权转移到应用程序的入口点.
我认为DCU文件源自Borland引入Delphi,以便将它们与TurboPascal生成的OBJ文件区分开来.也就是说,您无法将TP的OBJ文件直接链接到Delphi的DCU文件.它们是不同的格式.
Delphi也完全隐藏了链接器,所以你只需要进行编译和运行.但是,在Delphi的一个选项窗格中,所有链接器设置仍然存在.
除了David Schwartz的回答之外,有一种情况是dcu实际上与其他语言生成的典型obj文件完全不同:通用类型定义.如果在Delphi单元中定义泛型类型,则编译器将此代码编译为语法树表示而不是机器代码.然后,该语法树表示存储在dcu文件中.当然后使用泛型类型并在另一个单元中实例化时,编译器将使用该表示并使用泛型类型将其"合并"到单元的语法树.您可以认为这与方法内联有些类似.这也就是为什么一个大量使用泛型的单元编译需要更长的时间,尽管泛型类型是从dcu文件中"链接"的.
| 归档时间: |
|
| 查看次数: |
11769 次 |
| 最近记录: |