windows的lua"stub"dll的目的是什么?

Rod*_*ddy 2 windows dll lua stub shared-libraries

我期待在Lua的结合成一个C++项目,我有点被从分布在两个二进制文件(lua51.dll和lua5.1.dll)存在混淆Luabinaries.

根据文件......

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

为什么?在与第三方DLL链接之前,我从未需要存根DLL?

int*_*jay 7

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

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

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

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

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

  • @Roddy:某些应用程序可能需要两个DLL(因为它们使用与不同DLL链接的库).在这种情况下,最好使用转发而不是副本:它将节省内存,并且可以防止难以发现的错误,因为同一个库的两个副本彼此互操作. (2认同)