Swe*_*ngh 6 c++ windows dll static-linking visual-c++
我想问一下编译dll项目时生成的.lib文件的用处.
当我们编译项目时,会生成以下文件:.dll .exp .lib .pdb
既然我们也有.lib文件,我们可以使用这个文件将它静态链接到任何其他项目.如果没有,那么生成此.lib文件的用途是什么.
Mat*_*lia 14
将.lib与已生成一起.dll被称为"导入库",它可以让你使用DLL功能,包括它们的头,好像他们是在你的可执行静态链接.它确保当链接器必须修复引用到目标文件中的dll函数地址时,它可以在导入库中找到它们.在导入库中找到的这些函数实际上是存根,它从导入地址表中检索加载的dll中相应函数的实际地址,然后直接跳转到它(传统上;现在链接器中有一些智能性可以避免这种情况跳).
反过来,导入库包含链接器的特殊指令,指示它在可执行文件的导入表中生成相关条目,然后由加载程序在加载时读取("动态链接器",在Unix术语中) ).这样可以确保在调用可执行文件的入口点之前,加载引用的dll,并且IAT包含引用函数的正确地址.
请注意,所有这些只是方便的东西,允许您调用DLL函数,就像它们静态链接到您的可执行文件.你不严格需要,如果你处理的动态负载/函数地址检索明确(使用调用LoadLibrary和GetProcAddress)的.LIB文件; 将所有这些东西委托给链接器和加载器会更方便.
| 归档时间: | 
 | 
| 查看次数: | 1281 次 | 
| 最近记录: |