Lua的“stub” dll在Windows中是什么目的?

我正在考虑将 Lua 加入到一个 C++ 项目中,但对于 Luabinaries 发布的两个二进制文件 (lua51.dll 和 lua5.1.dll) 的存在感到有些困惑。

根据文档...

在 Windows 中,你的库或应用程序必须与一个存根库链接。存根库是一个只有函数声明的库,它将绑定你的 DLL 与 Lua DLL。

为什么?我从来没有在链接第三方 DLL 时需要使用存根 DLL 吗?

原文链接 https://stackoverflow.com/questions/2761751

点赞
stackoverflow用户189205
stackoverflow用户189205

一个存根库是一个 .lib 文件,不是一个 DLL 文件。它包含了 DLL 文件中所有导出函数的函数声明,这些函数只是将调用转发到 DLL 文件本身。因此,如果您构建了一个与 lua51.dll 链接的应用程序,您可以告诉链接器链接 lua51.lib,所有导出函数的调用都将转发到 DLL 文件。如果您没有这样做,链接时会出现许多 "unresolved external symbol" 错误。

只有在静态链接 DLL 时才需要这样做(这样当应用程序运行时自动加载)。在动态使用 LoadLibrary 加载 DLL 时不需要。

关于为什么它们有两个不同的 DLL,说明如下:

LuaBinaries DLL 包含一个名为 "lua51.dll" 的 dll 代理。它可以用来代替其他发行版发布的 "lua51.dll"。 它只是简单地将调用转发到 "lua5.1.dll"。 在转发中没有编译的源代码。

基本上,一些现有的应用程序链接 lua5.1.dll,而其他应用程序链接 lua51.dll,他们想要支持这两个。无论如何,这与存根库无关。

2010-05-03 23:02:00
stackoverflow用户298661
stackoverflow用户298661

我认为这与 __declspec(import)__declspec(export) 以及 GetProcAddress 有关,但我并不确定。

2010-05-03 23:12:15