【发布时间】:2011-01-15 11:49:27
【问题描述】:
使用 Visual Studio 2008,我有一个库的 .H 和一个 .LIB 文件。
我编写了一个程序并通过项目属性引用了 LIB。
它编译得很好,但是当它运行时,它会要求安装 DLL。
如果 DLL 与EXE 在同一个目录中,它可以工作,但是,如果我有LIB,这是否意味着这些函数已经静态链接到我的程序?
【问题讨论】:
标签: c dll static-linking
使用 Visual Studio 2008,我有一个库的 .H 和一个 .LIB 文件。
我编写了一个程序并通过项目属性引用了 LIB。
它编译得很好,但是当它运行时,它会要求安装 DLL。
如果 DLL 与EXE 在同一个目录中,它可以工作,但是,如果我有LIB,这是否意味着这些函数已经静态链接到我的程序?
【问题讨论】:
标签: c dll static-linking
并非所有lib 文件都是静态库。有些是导入库,很可能就是您链接的库。
如果您的 lib 文件比其对应的 dll 文件小得多,则肯定表明它是一个导入库。
【讨论】:
dumpbin /exports,如果您最终得到库中所有函数的列表,则它是一个导入库。
lib /list 也很有用。如果您只看到 .obj 引用,那么它只是静态的。如果它只有.dll,那么它是一个仅导入库。注意:.lib 文件可能同时存在。
让您的程序使用 DLL 需要导入库。它是一个扩展名为 .lib 的文件,就像静态 .lib 一样。但它非常小,它只包含由 DLL 导出的函数列表。链接器需要这个,因此它可以将 DLL 的名称嵌入到导入表中。你可以通过在你的 .exe 上运行 Dumpbin.exe /imports 来亲眼看到这一点
【讨论】: