【问题标题】:Cannot load lua dll module无法加载 lua dll 模块
【发布时间】:2020-07-18 16:44:00
【问题描述】:

我无法加载 32 位 c++ dll 的 lua 模块。 lua模块和lua代码在同一个文件夹中。

在 C++ 代码中:

extern "C" __declspec(dllexport) int luaopen_luartmidi(lua_State *L) {
    ...
}

lua 第一行:

local luartmidi = require 'luartmidi'

当我使用 vs code lua 32 位调试器运行 lua 代码时,我得到 错误信息:

发生异常:[C]:-1: error loading module ... from file ...

找不到指定的函数

Dependency Walker 说 LUA.DLL 丢失。当我在同一个文件夹中复制 lua.dll 时出现错误

c:Users/xyz/.vscode/extensions/actboy168.lua-debug-1.23.1/runtime/win32/lua53/lua.exe:检测到多个 Lua VM

【问题讨论】:

    标签: windows lua dllexport


    【解决方案1】:

    当您静态链接 lua 解释器,然后尝试加载链接到 Lua DLL 的外部模块(并期望存在 lua.dll 或类似名称的库)时,就会发生这种情况。您不能同时拥有一个静态编译的解释器和一个从 DLL 加载的解释器以存在于同一个进程中(“检测到多个 Lua VM”消息是由针对此条件的检查触发的)。

    您有三个选择:

    1. 静态编译所有内容(不要加载任何外部模块)
    2. 动态编译所有内容(不要静态链接 Lua 解释器)
    3. 使用代理库将 API 调用从外部库转发到静态链接的 Lua 解释器(需要导出 Lua 符号并编写代理库)。有关代码和详细信息,请参见 http://lua-users.org/wiki/LuaProxyDllFour 链接(适用于 Lua 5.1,但您可以调整 Lua 5.3 的脚本)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-06-10
      • 2017-07-12
      • 2012-02-18
      • 1970-01-01
      • 2017-07-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多