当发生Lua错误时,使用MINGW32编译的Lua 5.2会使我的宿主程序崩溃

时间:2013-11-11 10:13:50

标签: c lua mingw32

使用MINGW32编译Lua 5.2会创建一个库(lua52.dll),当发生Lua错误时,该库可能会使主机应用程序崩溃。

我通过在测试脚本中生成Lua语法错误来检测到此错误。如果脚本根本没有错误,则主机程序成功运行它。但是,当加载无效脚本时(例如IF块中缺少THEN),主机程序崩溃。

以下是我的代码片段:

//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不会返回,程序崩溃。

1 个答案:

答案 0 :(得分:3)

问题出在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的错误处理基于函数setjmplongjmp的使用。 -O2优化标志隐式地使编译器变为omit the frame pointer。为避免这种情况,我们通过-fno-omit-frame-pointer覆盖此设置。

希望这有帮助。

相关问题