为什么在C中将编译和链接过程分开是很重要的?

您所在的位置:网站首页 顾司爵和苏云今为什么分开 为什么在C中将编译和链接过程分开是很重要的?

为什么在C中将编译和链接过程分开是很重要的?

2024-05-10 00:02| 来源: 网络整理| 查看: 265

现在它可能没有以前那么重要了。

但是曾经有一段时间,编译一个项目可能需要几天的时间--在20世纪80年代,我们曾经在一个周末做一个“完整的构建”。仅仅解析单个文件的源代码就是一件相当大的事情,需要大量的时间和内存,所以语言的设计使得它们的模块(源文件)可以被隔离处理。

结果就是“对象文件”-- .obj (DOS/Windows)和.o (unix)文件--其中包含可重定位的代码、静态数据以及导出(我们定义的对象)和导入(我们需要的对象)的列表。链接阶段将所有这些内容粘合在一起,形成一个可执行文件或归档文件(.lib、.a、.so、.dll文件等),以便进一步包含。

让昂贵的编译任务独立运行导致了像make这样的复杂增量构建工具的出现,它极大地提高了程序员的生产力-这对于大型C项目仍然至关重要,比如Linux内核。

它还意味着,任何可以编译成目标文件的语言都可以链接在一起。因此,只要稍加努力,就可以将C语言链接到Fortran、COBOL、C++等等。

自那时以来开发的许多语言已经突破了可以存储在目标文件中的内容的界限。C++模板系统需要特殊处理,而且重载方法也不太适合,因为普通的.o文件不支持多个同名函数(请参阅C++ name mangling)。Java等人使用了一种完全不同的方法,使用自定义代码文件格式和粘合到DLL和共享目标文件上的“本机代码”调用机制。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3