涉及到链接时有些事情我不是很明白...我正在使用第三方库GEOS来编写程序。这个程序依赖于geos.lib,但仍然需要geos.dll才能运行。
我读了这个问题,我认为我理解了静态库和动态库之间的区别。但我不明白的是,为什么当我静态链接一个库时,仍然需要一个dll。
在Windows上有三种类型的库:
对象库是静态链接的。它们包含了由库抽象的代码的完整对象定义。
导入库是对象库的一种特殊形式。不像包含代码,它们包含了链接器所需信息,最终将可执行文件映射到动态链接库。
动态链接库和对象库一样为您的程序提供代码。然而,这些代码在运行时加载而不是编译到您的exe中。
您并不总是需要链接一个导入库。相反,您可以调用LoadLibrary()并通过名称或序数查找API入口点。(您始终需要告诉代码您想要进入哪个DLL以及该DLL的API在哪里。)
此处的其他评论是正确的,即没有办法将DLL转换为静态库而不重新编译库的代码 - 这是一种不同类型的输出。
它不是静态链接的。.lib只是一个存根库,将.dll绑定在Windows上。也就是说,你在编译时链接.lib,然后在运行时它会查找.dll。
你肯定是在链接一个动态库。 仅仅因为链接器需要 .lib 文件并不意味着你正在链接一个静态库。