我对 DLL 和 LIB 知之甚少,只知道它们包含程序正常运行所需的重要代码 - 库。但为什么编译器要生成它们呢?将所有代码包含在一个可执行文件中不是更容易吗? DLL 和 LIB 之间有什么区别?
最佳答案
有静态库 (LIB) 和动态库 (DLL) - 但请注意,.LIB 文件可以是静态库(包含目标文件)或导入库(包含允许链接器链接到 DLL 的符号)。
使用库是因为您可能拥有想要在许多程序中使用的代码。例如,如果您编写一个计算字符串中字符数的函数,那么该函数将在许多程序中很有用。一旦使该函数正常工作,您就不想每次使用它时都重新编译代码,因此您将该函数的可执行代码放入库中,链接器可以提取编译后的代码并将其插入到您的程序中。因此,静态库有时被称为“文件”。
动态库更进一步。在每个程序中拥有库函数的多个副本占用空间似乎很浪费。为什么他们不能共享该函数的一份副本?这就是动态库的用途。它可以通过在加载到内存中时将其映射到程序中来运行,而不是在编译时将库代码构建到程序中。同时运行的多个使用相同功能的程序可以共享一份副本,从而节省内存。事实上,您可以仅根据需要加载动态库,具体取决于代码的路径。如果您不进行任何打印,那么让打印机例程占用内存是没有意义的。另一方面,这意味着您必须在运行程序的每台计算机上安装动态库的副本。这会产生一系列问题。
举个例子,几乎每个用“C”编写的程序都需要名为“C 运行时库”的库中的函数,尽管很少有程序需要所有函数。 C 运行时有静态和动态版本,因此您可以根据特定需要确定程序使用哪个版本。
关于DLL 和 LIB 文件 - 是什么以及为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/913691/