使用MINGW32编译Lua5.2将创建一个库(lua52.dll),当发生Lua错误时,该库可能会使主机应用程序崩溃。
我在测试脚本中做了一个Lua语法错误,检测到了这个错误。如果脚本完全没有错误,主机程序将成功地运行它。但是,当加载无效的脚本时(例如,在一个IF块中缺少一个脚本),主机程序就会崩溃。
下面是我的代码片段:
//Load the script
int status = luaL_loadfile(L, "foo.lua");
if (status == 0) {
//Run the script
....
} else {
warn("LUA script error: %d. %s", status, lua_tostring(L, -1));
lua_pop(L, 1);
} 如果脚本没有语法错误,则status为0,脚本将成功执行。否则,luaL_loadfile不会返回,程序会崩溃。
发布于 2013-11-11 10:13:50
问题是在Lua的Makefile中指定的CFLAGS中。最初,src/Makefile包含以下行:
CFLAGS= -O2 -Wall -DLUA_COMPAT_ALL $(SYSCFLAGS) $(MYCFLAGS)通过将其更改为:
CFLAGS= -O2 -fno-omit-frame-pointer -Wall -DLUA_COMPAT_ALL $(SYSCFLAGS) $(MYCFLAGS)解释
Lua的错误处理基于setjmp和longjmp函数的使用。-O2优化标志隐式地使编译器变为omit the frame pointer。为了避免这种情况,我们通过-fno-omit-frame-pointer来覆盖此设置。
希望这能有所帮助。
https://stackoverflow.com/questions/19903762
复制相似问题