为什么 Visual Studio 需要静态库(.lib)来进行动态链接?

pay*_*man 2 c++ linker dynamic-linking static-linking visual-studio-2013

我想在我的项目(VS2013 - c++)中使用一些dll,

我使用“项目->属性->vc++目录”给出了dll和头文件的路径,构建项目后,出现链接器错误(常见的“无法解析的外部符号”)。这个问题可以通过将.lib文件交给链接器来解决!

但是为什么动态链接需要静态库(.lib)???

Mat*_*jek 5

它是一个导入库,其中包含导出的定义,位于(*)DLL的内部和名称。DLL

您可以使用LIB/DEF选项来创建导入库和导出文件。LINK使用导出文件构建包含导出(通常是动态链接库 ( DLL))的程序,并使用导入库来解析其他程序中对这些导出的引用。

并且:

在大多数情况下,您不需要使用LIB来创建导入库。当您链接包含导出的程序(可执行文件或 )时DLLLINK会自动创建描述导出的导入库。稍后,当您链接引用这些导出的程序时,您可以指定导入库。

动态库在运行时加载(在应用程序启动时) - 链接器不会检查某些特定符号驻留在DLL. Header__dllimport- “这个符号是外部的,它应该从某个地方导入”。Lib说“我知道这个符号在哪里 - 它位于XXX.dll,所以启动后看看那里”。


(*)我看到很多人试图更改名称.lib并相应地.dll期望它会起作用。的内容.lib是它没有的原因。