为什么visual studio与.DLL一起创建.LIB?

时间:2013-09-27 01:46:26

标签: c++ visual-studio dynamic-linking libconfig

我有一个项目“Logger”,其中配置类型是.dll。

“Logger”使用“libconfig”(开源配置解析器)。目前,我有一个单独的“libconfig”项目,其配置类型是.lib

我将“libconfig”添加到Logger的框架和引用设置:

  • link library depedencies = true
  • 使用库依赖项输入= false

在Logger的链接器命令行中,我看到: / IMPLIB:“path \ to \ Logger.lib”

我的问题是: 为什么需要创建Logger.lib?我知道了 / OUT =“path \ to \ Logger.dll”,但我试图了解visual studio的构建过程。

M$'s IMPLIB doc开始,我看到了LINK流程的一部分。我仍然没有得到它。

编辑:我没有提到如何使用Logger DLL。我的应用程序将在运行时加载它(因为只有特定的cmd行args需要此功能)

2 个答案:

答案 0 :(得分:12)

DLL包含代码。 .lib文件基本上包含文件中函数的存根,这使得链接器可以轻松(并且相对快速)将正确的信息放入可执行文件中以使用DLL中的函数。

最终,没有理由他们 做这个 - 它主要使链接器更简单,更快,因为它不需要(至少同样多)特殊情况代码处理静态库和动态库。他们可以通过将代码和链接信息放入单个文件来解决这个问题,但这会增加文件大小(稍微)。

现在可能并不多,但是当Windows是新的时,很多程序仍然分布在360K软盘上,因此最小化分发给用户的文件大小被认为是非常重要的。

答案 1 :(得分:5)

使用logger.dll的exe需要链接到logger.lib。如果没有lib,就无法构建exe。 lib包含满足exe代码调用的存根函数。 (在运行时,存根将调用传输到DLL中。)