微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

lua“存根”dll的目的是什么?

我正在考虑将Lua整合到一个C ++项目中,并且在Luabinaries发行版中存在两个二进制文件(lua51.dll和lua5.1.dll),这让我感到困惑 。

根据文件

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

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

如何判断文件是否正在从Linux写入Windows CIFS共享

在共享库中使用全局variables

构build具有依赖性的Linux共享库时,跳过编译时符号parsing

Git在Windows共享远程挂断

在运行时交换链接的共享库

“CIFS VFS:cifs_mount失败w / return code = -22”和“错误的fstypes,错误的选项,坏的超级块”

对于CIFS共享上的文件PHP file_exists有时会返回false

在Linux中查找共享库的加载地址

在完成ReportCompleted后分享目标合约

一个静态库链接到共享库?

存根库是一个.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 ,他们想要支持他们两个。 在任何情况下,这与存根库不相关。

我相信这是关于__declspec(导入)和__declspec(导出)与GetProcAddress。 不过,我实际上并不知道。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐