DLL 和 LIB 文件 - 是什么以及为什么?

标签 dll static-libraries

我对 DLL 和 LIB 知之甚少,只知道它们包含程序正常运行所需的重要代码 - 库。但为什么编译器要生成它们呢?将所有代码包含在一个可执行文件中不是更容易吗? DLL 和 LIB 之间有什么区别?

最佳答案

有静态库 (LIB) 和动态库 (DLL) - 但请注意,.LIB 文件可以是静态库(包含目标文件)或导入库(包含允许链接器链接到 DLL 的符号)。

使用库是因为您可能拥有想要在许多程序中使用的代码。例如,如果您编写一个计算字符串中字符数的函数,那么该函数将在许多程序中很有用。一旦使该函数正常工作,您就不想每次使用它时都重新编译代码,因此您将该函数的可执行代码放入库中,链接器可以提取编译后的代码并将其插入到您的程序中。因此,静态库有时被称为“文件”。

动态库更进一步。在每个程序中拥有库函数的多个副本占用空间似乎很浪费。为什么他们不能共享该函数的一份副本?这就是动态库的用途。它可以通过在加载到内存中时将其映射到程序中来运行,而不是在编译时将库代码构建到程序中。同时运行的多个使用相同功能的程序可以共享一份副本,从而节省内存。事实上,您可以仅根据需要加载动态库,具体取决于代码的路径。如果您不进行任何打印,那么让打印机例程占用内存是没有意义的。另一方面,这意味着您必须在运行程序的每台计算机上安装动态库的副本。这会产生一系列问题。

举个例子,几乎每个用“C”编写的程序都需要名为“C 运行时库”的库中的函数,尽管很少有程序需要所有函数。 C 运行时有静态和动态版本,因此您可以根据特定需要确定程序使用哪个版本。

关于DLL 和 LIB 文件 - 是什么以及为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/913691/

相关文章:

c++ - 关于 COM/ActiveX 对象的问题

c# - 无法在 Visual Studio 中更新 dll 引用

dl 库的 C++ 等效 Windows

ios - ios中的静态库

c++ - 为什么链接到 LIB 会显着增加二进制文件的大小

ios - fopen$UNIX2003 在外部库内失败

c++ - 动态调用 DLL C++

c++ - DLL 之间的交互

ios - 链接多个静态库时出现重复符号错误。

windows - Qt 链接静态构建库