登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

秒大刀 博客

好好学习 天天向上

 
 
 

日志

 
 
 
 

luabind升级  

2009-04-11 19:53:05|  分类: Lua |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

介绍下luabind:

    首先庆祝luabind终于开始出新版本0.8.1了,貌似还比较频繁,早日盼着版本号超过1.0。

    Luabind is a library that helps you create bindings between C++ and lua. It has the ability to expose functions and classes, written in C++, to lua. It will also supply the functionality to define classes in lua and let them derive from other lua classes or C++ classes. Lua classes can override virtual functions from their C++ baseclasses.

    luabind本身用了很多编译时技巧来实现C++和lua之间的绑定。目前最新的版本是luabind-0.8.1(2009-03-10更新),官方地址在:https://sourceforge.net/projects/luabind/,编译需要lua5.1的支持,同时可能需要最新的boost支持。具体的编译过程可以参考《VC下编译lua和luabind纪实》。

    lua目前最新的版本是lua-5.1.4(2008-08-22更新),官方地址在http://www.lua.org/download.html。无需任何第三方组件即可编译成功,真是做的很不错!

    boost目前最新的版本是boost-1.38.0(2009-02-08更新),官方地址在http://www.boost.org/。编译有点复杂,可以参考《Boost 1.38.0 编译》,不过编译luabind本身是不需要boost的编译版本的,只要include相关的源码就可以了:-)


现在说说这次我的luabind升级事件:

    我写了一个lua的组件,当然是基于最新的5.1.4写的,已经经过了测试。本想加入项目,但发现项目中lua是5.0.2的,编译不过,很多函数什么的都不兼容了。想了想,升级lua算了,反正项目刚开始,现在不升更待何时?紧接着就将lua升级到5.1.4。

    然后发现项目中的luabind-0.7.1不再兼容lua-5.1.4,只好再将luabind升级到0.8。
    升级luabind后发现项目中的boost又不兼容了,我已经有点出汗了,咬咬牙将boost升级到1.38.0。
    终于可以编译通过了,赞!
    但编译通过并不代表万事大吉,F5就发现程序起不来了,luabind内部迭代器析构的时候会莫名其妙的down掉。再三确认后觉得应该不是我用法上的bug,然后和作者联系,他说先让我使用最新的0.8.1。

    既然人家作者都说了,那咱就升级吧。luabind由0.8升到0.8.1后,发现boost又不兼容了,作者是基于1.34做的,我的已经升到了1.38.0,汗一个。我把boost版本又调整到他规定的版本,结果发现win下无法编译,作者是在linux下开发的。

    好了,放弃吧,还等啥呢。全盘revert!


本次升级到luabind-0.8的过程中遇到的几个编译不过的解决方案分享如下:
    构造函数非公有化的类在采用module(L)[class_<>()]语法绑定时会遇到“error: C2248: 无法访问private/protected成员”错误。很幸运的是可通过声明friend luabind::detail::delete_s<>友员来解决luabind无法访问这些受保护的构造函数。
    不再提供对C\C++中raw array的绑定,哪怕是char str[]这种形式也不予理会,“error: C2090: 函数返回数组”会让人很郁闷的。解决方法就是定义一个返回数组首地址的辅助函数,然后再以property的形式提供给luabind,具体可以参考《how to bind a raw array?

平台:Windows XP sp3; Visual Studio 2005 sp1; luabind 0.8; lua 5.4.1; boost 1.38.0


问题的解决和结论:

    无奈之下,自己把lua-5.0.2和lua-5.1.4不兼容的地方重新实现一遍,所有问题解决。本想着可能会很复杂,因为lua5.0到5.1的改动非常大,值得庆幸的是我用到的不兼容之处并没有我想象的那么多,用了大概40行代码的适配代码,搞定。

    这次的教训非常生动深刻,开源这些玩意的版本耦合始终是那么的神秘。该升不该生?该升哪个不该升那个?升到那个程度?现在确实有点怕了。天下没有免费的午餐,开源也不是那么好用的。没有商业的推动,品质如何就只有靠自己鉴定和把握了。

    我这次算给牦牛剪毛了......

  评论这张
 
阅读(2591)| 评论(5)

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018