12

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

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

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

  • 链接库依赖 = true
  • 使用库依赖输入 = false

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

我的问题是:为什么需要创建 Logger.lib?我看到 /OUT = "path\to\Logger.dll",但我正在尝试了解 Visual Studio 的构建过程。

M$ 的 IMPLIB doc中,我看到它是 LINK 过程的一部分。我还是不明白。

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

4

2 回答 2

14

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

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

现在可能没有多大意义,但在 Windows 刚出现时,仍有相当多的程序分布在 360K 软盘上,因此最小化分发给用户的文件大小被认为是相当重要的。

于 2013-09-27T02:13:12.647 回答
6

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

于 2013-09-27T03:26:26.820 回答