程序静态链接到库但仍需要运行dll

und*_*ndu 19 c++ dll linkage

在链接方面有一些我不理解的事情......我正在使用第三方库(GEOS库)编写程序.此程序依赖于geos.lib但仍需要运行geos.dll.

我读了这个问题,我想我理解静态库和动态库之间的区别.我不明白的是为什么我静态链接库时仍然需要一个dll.

BeR*_*l82 29

Windows上有3种库:

  • 对象库(*.lib)
  • 导入库(*.lib)
  • 动态库(*.dll)

对象库是静态链接的.它们包含库抽象代码的完整对象定义.

导入库是对象库的一种特殊形式.它们不包含代码,而是包含最终将可执行文件映射到动态链接库的链接器的信息.

动态链接库,如对象库,为程序提供代码.但是,此代码在运行时加载,而不是编译到您的exe中.

您并不总是需要链接导入库.相反,您可以调用LoadLibrary()并按名称或序号查找API入口点.(您始终必须告诉代码您想要输入哪个DLL以及DLL的API中的位置.)

这里的其他注释是正确的,因为你不能在没有重新编译libary的代码的情况下将DLL变成静态库 - 它是一种不同的输出.

  • [初学者链接指南](http://www.lurklurk.org/linkers/linkers.html)是一篇关于链接的好文章.本周我在研究这个完全相同的问题时发现了它. (5认同)

And*_*zos 23

它没有静态链接..lib只是一个存根库,它绑定在Windows上的.dll中.也就是说,你在编译时链接.lib,然后在运行时它将寻找.dll.