【发布时间】:2015-04-03 01:33:14
【问题描述】:
我有一个相对复杂的 lua 环境,我正在尝试了解以下内容将/可能如何工作。启动设置包括以下两个模块:
- 主应用程序(无 lua 环境)
- DLL(静态链接到 lua lib,包括解释器)
dll 被加载到主应用程序中,并运行一个 lua 控制台解释器和一个可从控制台访问的 lua API。
现在,假设我想扩展此设置以包含另一个扩展该 lua API 的 dll,例如 luasql。新的 dll 需要链接到 lua 才能构建,我的理解是我不能静态链接到 lua,因为当我加载扩展 dll 时,现在会有两个未共享的 lua 代码副本正在处理中。但是,即使我将 lua 核心库构建为 dll 并使用扩展 dll 链接到它,该 lua 核心 dll 也不会在运行时由主应用程序或主 dll 加载。所以我的问题是:
- 考虑到不会加载 lua 核心 dll,如果我从主 dll 中的 lua 解释器加载该扩展 dll,会发生什么情况?
- 如果我在运行时加载了 lua 核心 dll,这会与静态链接的 lua 库发生冲突吗?
- 这两种情况(在扩展 dll 中静态链接和动态链接/加载 lua dll)是否会导致 lua 核心代码的两个副本在处理中?
- 在这种情况下,如果我尝试从在扩展 dll 中构建/加载的主 dll 的 lua 环境/解释器调用 API 函数会发生什么?
- 或者 lua 是否有某种特殊机制来加载提供新的 C API 函数的本机 dll,从而可以绕过正常的链接规则?
希望我已经提供了足够的细节来使问题具体化,否则我很乐意进一步完善场景/问题。
编辑:我查看了Bundling additional Lua libraries for embedded and statically linked Lua runtime,我相信它可能有助于最终提供解决方案,但我想在链接器级别理解它。
【问题讨论】: