首页 文章

为什么visual studio需要一个静态库(.lib)来进行动态链接?

提问于
浏览
1

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

我使用“project-> properties-> vc目录”给出了dll和header的路径,并且在构建项目之后,出现了链接器错误(常见的“未解析的外部符号”) . 通过将.lib文件提供给链接器可以解决问题!

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

2 回答

  • 1

    它是一个导入库,其中包含导出的定义,它位于 DLL 内,并且名称为 DLL (*) .

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

    并且:

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

    动态库在运行时加载(在应用程序启动时) - 链接器不检查某些特定符号在 DLL 中的位置 . Header__dllimport - "this symbol is an extern, it should be imported from somewhere" . Lib 说“我知道这个符号在哪里 - 它位于 XXX.dll ,所以在启动后查看” .


    (*) 我看到很多人,他们试图改变 .lib 和相应的 .dll 的名字,并期望它会起作用 . .lib 的内容是它没有的原因 .

  • 2
    • 告诉它DLL的名称及其中的内容,以及输入的pioint数字(如果使用的话),以及

    • 将二进制接口(.lib)与其实现(DLL)隔离开来 . 例如,Winsock有一个标准的.lib文件,它独立于当天的实际多供应商实现 .

相关问题