gpt4 book ai didi

Lua - 尝试为静态链接的 Lua 添加扩展时出现 "multiple vms detected"

转载 作者:行者123 更新时间:2023-12-03 20:19:27 25 4
gpt4 key购买 nike

我的应用程序包含静态链接的 lua 5.2 解释器(并且无法访问代码)。
当我尝试使用下一个代码编写扩展时:

#define LUA_LIB
#define LUA_BUILD_AS_DLL
#include "lua.hpp"

extern "C"
{
static int test(lua_State* state)
{
return 1;
}

static const struct luaL_Reg functions[] = {
{"test", test},
{NULL, NULL},
};

int __declspec(dllexport) luaopen_test(lua_State* state)
{
luaL_newlibtable(state, functions);
luaL_setfuncs(state, functions, 0);
return 0;
}
}

并用静态链接的 lua52.lib 编译它。
当我尝试从 lua 代码中要求它时,出现“检测到多个 vms”错误。
在这种情况下我能做什么?

最佳答案

您不能使用静态链接的 lua52.lib 对其进行编译,因为主应用程序会加载自己的 lua52.lib 版本,并且当“需要”此模块时,它会加载自己的副本,这会导致“检测到多个 VM”消息。

使用静态编译的 VM,您有两个选项(在 Windows 上):(1)静态包含所有模块,或(2)针对 Lua52.dll 编译模块,但不是实际的 DLL,而是包含一个“代理”DLL,它将转发 Lua API 调用静态编译的可执行文件中的方法(API 方法也需要在可执行文件中导出)。

this thread for the discussion关于如何编译可执行文件和LuaProxyDllFour代理 DLL 的页面。

在 Linux 上,您不需要代理库,但您仍然需要避免将 Lua 解释器链接到库中并使用 -Wl,-E 从可执行文件中导出符号链接(symbolic link)器选项; see lhf's answer for details .

关于Lua - 尝试为静态链接的 Lua 添加扩展时出现 "multiple vms detected",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31639483/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com