LIB与DLL的区别

1.dll是一个可执行文件,而lib则是对dll中引出函数提供索引地址功能的文件。在隐式链接dll(静态)的时候,linker可以根据lib文件提供的索引地址进行链接。动态是指在运行中在需要的时候加载dll文件,能过查询dll的导出函数地址来调用的dll中的函数,典型的调用为LoadLibrary,QueryProcAddress,FreeLibrary.


所以,lib文件主要是提供给linker进行静态连接使用的。而dll则存放程序真正的可执行的代码。无论动态还是静态。dll都是必须的,而动态调用下,lib不是必须的!

 

2.上面提到的把自己的代码编译成lib+.h的方式提供给别人是静态链接,这里需要声明一下概念的问题,程序进行链接的时候,lib中是否包含执行代码要看他的类型:


在静态库情况下,函数和数据被编译进一个二进制文件(通常扩展名为*.LIB),编译器在处理程序代码时将从静态库中恢复这些函数和数据并把他们和应用程序中的其他模块组合在一起生成可执行文件。这个过程称为"静态链接",此时因为应用程序所需的全部内容都是从库中复制了出来,所以静态库本身并不需要与可执行文件一起发行。


在动态库的情况下,有两个文件,一个是引入库(.LIB)文件,一个是DLL文件,引入库文件包含被DLL导出的函数的名称和位置,DLL包含实际的函数和数据,应用程序使用LIB文件链接到所需要使用的DLL文件,库中的函数和数据并不复制到可执行文件中,因此在应用程序的可执行文件中,存放的不是被调用的函数代码,而是DLL中所要调用的函数的内存地址,这样当一个或多个应用程序运行是再把程序代码和被调用的函数代码链接起来,从而节省了内存资源。





Modified At 2008-04-25 21:29:10

Leave a Reply

Your email address will not be published.