挖井

类库大魔王的挖井日记

挖一口属于自己的井


LuaJIT2与Luabind打架了

  其实这个问题老早就有了,当时还在Lua的maillist上提过,不过当时我只是发现LuaJIT2在执行Lua脚本时,如果Lua脚本调用了不存在的C函数时会使宿主崩溃,Mike Pall同学(LuaJIT的作者)倒是很爽快地解决了这个问题。后来发现,Mike Pall解决的只是一部分,我这里因为用到了Luabind,通过Luabind来调用执行Lua函数,如果Lua脚本又调用到不存在的C++函数,进程就会无声无息地退出,而如果是官方Lua的话,则是会老老实实地打印那些出错信息出来。
  昨天忍无可忍了,就又向Lua maillist发了封邮件,今天发现Mike Pall和Daniel Wallin(Luabind的作者)争起来了,呵呵。Mike Pall说问题在Linux上和Windows/x64上都没能重现,不知道Windows/x86出了什么问题,可能是Luabind重复抛出异常了,Daniel Wallin则说Luabind只是简单地调用了lua_error,他倒是能在虚拟机的Windows环境下重现问题,最后他又给出了一段简化后的代码,只要lua_error调用后面有C++对象的析构,LuaJIT就会出问题。
  我倒是偶然看到今年1月份的Lua maillist上的邮件,Mike Pall曾经说过Windows/x86上MSVC实现try/catch是用SEH实现的,这个LuaJIT处理可能有点问题。但他后来的邮件中好像又说在新代码中已经解决这个问题了。我于是用MinGW试了试,GCC 4.4.0编译出来的,确实是没问题的呢!
  不过最后,又看到Mike Pall好大一篇解释,最终结论是建议所有用户都升级使用x64,囧!

本文地址:

https://minidump.info/blog/2010/04/luajit2-e4-b8-8eluabind-e6-89-93-e6-9e-b6-e4-ba-86/

上一篇

入沪通行证

  刚才有那么一刹那,突然很害怕,不知道今天做了什么,几秒钟后反应过来,今天出门了,去办入沪车辆通行证了,现在这记性,真让人无语。  总的说来是比较顺利的,昨天在网上看过大致的要求,今天先跑去东关派出所,这是离我们家最近的派出所了,顺便试了试前天买的导航,除了我们村认不出来外,其他的都不错。到...…

Driving 全文阅读
下一篇

故事已经开始

  我不知道该给这篇文章取个什么题目,半个小时前,是先想好题目,然后决定要写这篇文章的,可是当我开始写的时候,觉得那个题目不合适,不能完全表达出我的心情、我的感受。  昨天从家里出发的时候,我看了一眼时间,那是清晨的8:14,当时只是为了计一下时,看我全程需要多久。最后停在上海的小区楼下时,时...…

Life mm 全文阅读