目标文件是由称为编译器的程序生成的计算机文件,包含数据和指令。编译器将编程语言源代码翻译成称为目标代码的中间机器可读形式。较小的程序可能会编译为单个目标文件,而较大的程序通常会编译为多个具有相关功能的文件。这些单独的目标文件通过链接器连接起来,并添加操作系统特定信息以形成可执行程序。
在通常的实践中,目标文件由".obj"文件扩展名表示。然而,这些文件有多种不同的格式。最常见的是 Intel® 可重定位对象模块格式 (OMF) 以及 Windows® 和 UNIX® System V 的通用对象文件格式 (COFF)。在许多 INIX® 系统中,可执行和可链接格式 (ELF) 已逐渐取代COFF。
无论格式如何,目标文件通常包含允许其交互的三种类型的信息与其他程序模块共享。对外部引用开放的过程和数据都被分配了名称,通过这些名称可以从其他模块调用它们。同样,对模块外部信息的引用也会被标注,但不会分配名称。当文件链接时,未命名引用将被分配在最初定义它们的模块中给定的名称。本地名称用于仅在模块内引用的指令和数据。
并非所有可链接代码都存储为目标文件。库是作为目标代码存储的预编译例程。它们的生成方式与目标文件大致相同,对于存储频繁调用的过程很有用。当链接器在其他目标文件中找不到引用时,它将自动lly 在库文件中搜索它。大多数编程语言的实现都带有标准函数库。
通过动态链接,一个目标文件可以被多个执行程序同时使用。它不是在链接时将目标代码绑定到程序,而是在加载程序时或在运行时引用过程时检索目标代码。在 Windows® 环境中,这些称为动态链接库,并由".dll"扩展名表示。类似于 Unix® 的系统通常将这种类型的文件称为动态共享对象 (DSO)。这种类型的目标文件也可以实现为与特定程序一起使用,并且将是该程序安装的一部分。
0 篇文章
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!