Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ luaL_dofile在已知良好字节码上失败,可用于未编译版本_C++_Lua - Fatal编程技术网

C++ luaL_dofile在已知良好字节码上失败,可用于未编译版本

C++ luaL_dofile在已知良好字节码上失败,可用于未编译版本,c++,lua,C++,Lua,我组装了一个非常简单的Lua引擎,但它似乎拒绝了在Lua控制台中工作的字节码。未编译版本在引擎中工作。我是不是用错了luac 我使用给定的命令进行编译,并以“./a.out”的形式运行 res/default.lua: print("Setting up world structure.") luac命令: luac -o res/default.lux res/default.lua MWE: 脚本的正确输出: File: res/default.lua Setting

我组装了一个非常简单的Lua引擎,但它似乎拒绝了在Lua控制台中工作的字节码。未编译版本在引擎中工作。我是不是用错了luac

我使用给定的命令进行编译,并以“./a.out”的形式运行

res/default.lua:

print("Setting up world structure.")
luac命令:

luac -o res/default.lux res/default.lua
MWE:

脚本的正确输出:

File: res/default.lua
Setting up world structure.
字节码输出错误:

File: res/default.lux
Error: Could not load lua file.
从lua控制台输出的两个文件:

Setting up world structure.

让我困惑的是,它在lua控制台中工作,但在我的程序中却不工作。在调用luaL_dofile之后,我添加了一个对lua_tostring的调用,如下所示:

rc = luaL_dofile(m_lua, filename.c_str());
std::ostringstream ostr;
ostr << "Could not load lua file. ";
ostr << lua_tostring(m_lua, -1);
THROW_IF_NONZERO(rc, ostr.str());
怎么回事

长话短说,我安装了Lua的前一个版本,因为在一些不相关的东西中存在过时的包依赖关系。旧的luac正在拦截luac命令并编译为有效但不兼容的字节码。卸载了我并不真正需要的无关软件包,现在一切正常了


这个故事的寓意是:始终检查Lua堆栈上的错误字符串,它可能会告诉您出了什么问题。

让我困惑的是,它在Lua控制台中工作,但在我的程序中不工作。在调用luaL_dofile之后,我添加了一个对lua_tostring的调用,如下所示:

rc = luaL_dofile(m_lua, filename.c_str());
std::ostringstream ostr;
ostr << "Could not load lua file. ";
ostr << lua_tostring(m_lua, -1);
THROW_IF_NONZERO(rc, ostr.str());
怎么回事

长话短说,我安装了Lua的前一个版本,因为在一些不相关的东西中存在过时的包依赖关系。旧的luac正在拦截luac命令并编译为有效但不兼容的字节码。卸载了我并不真正需要的无关软件包,现在一切正常了


这个故事的寓意是:始终检查Lua堆栈上的错误字符串,它可能会告诉您出了什么问题。

始终检查返回代码和错误消息是极好的建议。始终检查返回代码和错误消息是极好的建议。。
rc = luaL_dofile(m_lua, filename.c_str());
std::ostringstream ostr;
ostr << "Could not load lua file. ";
ostr << lua_tostring(m_lua, -1);
THROW_IF_NONZERO(rc, ostr.str());
Error: Could not load lua file. res/default.lux: version mismatch in precompiled chunk