除了它们包含程序必需的关键代码(库)外,我对DLL和LIB的了解很少。但是编译器为什么要生成它们呢?将所有代码包含在单个可执行文件中不是更容易吗?DLL和LIB之间有什么区别?
我对DLL和LIB的了解很少。但是编译器为什么要生成它们呢?将所有代码包含在单个可执行文件中不是更容易吗?DLL和LIB之间有什么区别?除了它们包含程序必需的关键代码(库)外,我对DLL和LIB的了解很少。但是编译器为什么要生成它们呢?将所有代码包含在单个可执行文件中不是更容易吗?DLL和LIB之间有什么区别?
我对DLL和LIB的了解很少。但是编译器为什么要生成它们呢?将所有代码包含在单个可执行文件中不是更容易吗?DLL和LIB之间有什么区别?.lib
文件和适当的头文件时,这个 .lib
文件仅仅是目标 DLL 的描述符,它包括地址、入口点等信息但没有代码,必须传递给链接器。第二种是 显式链接,即通过手动使用 LoadLibrary
函数加载 DLL 来使用它。在这种类型中,我们不需要那个 .lib
文件,但我们必须花费一点力气来查找 DLL 的导出项及其地址,并通过指针调用这些函数。 - itachi创建DLL/LIB的一个重要原因是为了重用和重定位,而不仅仅是将代码编译成可执行文件。平均而言,Java或.NET应用程序(例如)很可能会使用几个第三方(或框架)库。与必须将所有第三方代码编译到应用程序中相比,仅针对预构建库进行编译要容易得多且更快。将代码编译为库还可以鼓励良好的设计实践,例如设计适用于不同类型应用程序的类。
DLL是一组函数的库,可供其他可执行程序共享使用。只需查看您的windows/system32目录,您就会发现其中有数十个DLL文件。当您的程序创建一个DLL时,通常还会创建一个lib文件,以便应用程序*.exe程序可以解析在DLL中声明的符号。
.lib是一组函数库,这些函数与程序静态链接 -- 它们不会被其他程序共享。每个链接到*.lib文件的程序都拥有该文件中的所有代码。如果您有两个程序A.exe和B.exe,它们都链接到C.lib,则每个A和B都将包含C.lib中的代码。
如何创建DLL和Lib取决于您使用的编译器。每个编译器的实现方法都不同。
另一个区别在于性能。
由于DLL是由.exe文件在运行时加载的,因此.exe文件和DLL使用共享内存概念,因此相对于静态链接,性能较低。
另一方面,.lib是在编译时静态链接到每个请求的进程中的代码。因此,.exe文件将具有单一内存,从而提高了进程的性能。