windows的lua“stub”dll的目的是什么?

时间:2010-05-03 22:55:05

标签: windows dll lua shared-libraries stub

我正在考虑将Lua合并到一个C ++项目中,并且由于Luabinaries的分发中存在两个二进制文件(lua51.dll和lua5.1.dll)而感到有点困惑。

根据文件......

  

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

为什么呢?我在连接第三方DLL之前从未需要存根DLL?

2 个答案:

答案 0 :(得分:7)

存根库是.lib文件,而不是DLL。它包含DLL中所有导出函数的函数声明,它只是将调用转发到DLL本身。因此,如果您构建要与lua51.dll链接的应用程序,则告诉链接器链接lua51.lib,并且对导出函数的所有调用都将转发到DLL。如果你不这样做,链接时会出现很多“未解决的外部符号”错误。

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

关于为什么他们有两个不同的DLL,手册说:

  

LuaBinaries DLL包有一个名为“lua51.dll”的DLL代理。它可以用来替换其他发行版发布的其他“lua51.dll”。它只会将调用转发给“lua5.1.dll”。转发中没有编译的源代码。

基本上,一些现有应用程序与lua5.1.dll链接,而其他应用程序与lua51.dll链接,他们希望同时支持它们。无论如何,这与存根库无关。

答案 1 :(得分:0)

我认为这与__declspec(import)和__declspec(export)与GetProcAddress有关。但是,我实际上并不确定。