首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用MINGW32编译的Lua5.2在发生Lua错误时使我的主机程序崩溃

使用MINGW32编译的Lua5.2在发生Lua错误时使我的主机程序崩溃
EN

Stack Overflow用户
提问于 2013-11-11 10:13:50
回答 1查看 196关注 0票数 3

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

我在测试脚本中做了一个Lua语法错误,检测到了这个错误。如果脚本完全没有错误,主机程序将成功地运行它。但是,当加载无效的脚本时(例如,在一个IF块中缺少一个脚本),主机程序就会崩溃。

下面是我的代码片段:

代码语言:javascript
复制
//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不会返回,程序会崩溃。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-11 10:13:50

问题是在Lua的Makefile中指定的CFLAGS中。最初,src/Makefile包含以下行:

代码语言:javascript
复制
CFLAGS= -O2 -Wall -DLUA_COMPAT_ALL $(SYSCFLAGS) $(MYCFLAGS)

通过将其更改为:

代码语言:javascript
复制
CFLAGS= -O2 -fno-omit-frame-pointer -Wall -DLUA_COMPAT_ALL $(SYSCFLAGS) $(MYCFLAGS)

解释

Lua的错误处理基于setjmplongjmp函数的使用。-O2优化标志隐式地使编译器变为omit the frame pointer。为了避免这种情况,我们通过-fno-omit-frame-pointer来覆盖此设置。

希望这能有所帮助。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19903762

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档