【问题标题】:Static linking to lib and still requesting DLL静态链接到 lib 并且仍然请求 DLL
【发布时间】:2011-01-15 11:49:27
【问题描述】:

使用 Visual Studio 2008,我有一个库的 .H 和一个 .LIB 文件。 我编写了一个程序并通过项目属性引用了 LIB。 它编译得很好,但是当它运行时,它会要求安装 DLL。 如果 DLL 与EXE 在同一个目录中,它可以工作,但是,如果我有LIB,这是否意味着这些函数已经静态链接到我的程序?

【问题讨论】:

标签: c dll static-linking


【解决方案1】:

并非所有lib 文件都是静态库。有些是导入库,很可能就是您链接的库。

如果您的 lib 文件比其对应的 dll 文件小得多,则肯定表明它是一个导入库。

【讨论】:

  • 您也可以在 .lib 文件上运行 dumpbin /exports,如果您最终得到库中所有函数的列表,则它是一个导入库。
  • lib /list 也很有用。如果您只看到 .obj 引用,那么它只是静态的。如果它只有.dll,那么它是一个仅导入库。注意:.lib 文件可能同时存在。
【解决方案2】:

让您的程序使用 DLL 需要导入库。它是一个扩展名为 .lib 的文件,就像静态 .lib 一样。但它非常小,它只包含由 DLL 导出的函数列表。链接器需要这个,因此它可以将 DLL 的名称嵌入到导入表中。你可以通过在你的 .exe 上运行 Dumpbin.exe /imports 来亲眼看到这一点

【讨论】:

    猜你喜欢
    • 2017-06-15
    • 2018-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多