我想在我的项目中使用一些dll(VS2013 - c ++),
我使用“project-> properties-> vc ++目录”给出了dll和header的路径,并且在构建项目之后,出现了链接器错误(常见的“未解析的外部符号”)。将.lib文件提供给链接器可以解决问题!
但为什么静态库(.lib)需要动态链接???
答案 0 :(得分:2)
它是一个导入库,其中包含位于DLL
内的导出定义以及DLL
(*)的名称。
您可以使用
LIB
和/DEF
选项来创建导入库和导出文件。LINK
使用导出文件构建包含导出的程序(通常是动态链接库(DLL
)),并使用导入库来解析对其他程序中这些导出的引用。
还有:
在大多数情况下,您无需使用
LIB
来创建导入库。链接包含导出的程序(可执行文件或DLL
)时,LINK
会自动创建一个描述导出的导入库。稍后,当您链接引用这些导出的程序时,请指定导入库。
动态库在运行时加载(在应用程序启动时) - 链接器不会检查某些特定符号在DLL
中的位置。 Header
说__dllimport
- “这个符号是extern,它应该从某个地方导入”。 Lib
说“我知道这个符号在哪里 - 它位于XXX.dll
,所以在启动后查看它。”
(*)我看到很多人试图更改.lib
和相应的.dll
的名称并预期会发生变化。 .lib
的内容是它没有的原因。
答案 1 :(得分:1)
告诉它DLL的名称及其中的内容,以及使用的条目pioint数字,以及
将二进制接口(.lib)与其实现(DLL)隔离开来。例如,Winsock有一个标准的.lib文件,它独立于当天的实际多供应商实现。