战魂小筑

讨论群:309800774 知乎关注:http://zhihu.com/people/sunicdavy 开源项目:https://github.com/davyxu

   :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  251 随笔 :: 0 文章 :: 506 评论 :: 0 Trackbacks

今天将部分工程从静态链接库改为动态链接库,并使用接口方式创建时,原来lua调用的地方居然挂掉了,挂的地方是table在清除时,crash在newkey

google了一下,找到了一篇颇有参考价值的文章

 

A common error is to link C extension modules (shared libraries)
with the static library. The linker command line for extension
modules must not ever contain -llua or anything similar!
I.e. check your build process. If you are unsure where the two
copies of the Lua core come from, grep the binaries for some
characteristic error message, like "table index is nil".
我的lua封装库是与lua源码一起封装在一个静态链接库提供给所有程序链接使用。有些工程只有1个dll或者exe单独链接,不会出现问题。问题很大程度上就发生于将一个lua源码构成的库链接给多个dll或者exe,或者混杂链接,这样极易出现莫名其妙的table访问到dummy_node的错误情况
因此,马上调整,尝试将这个库改为dll。但是在一些模板函数偏特化上出现了链接问题。最后发现,动态链接库完全就是模板的噩耗,虽然模板函数是内联,对于全局的模板函数,将其放在头文件中就会出现多重引用问题。因此放弃,将lua5.1的源码放在一个dll中,将封装库放在静态库中,这样就绝对没有任何问题
posted on 2009-07-20 16:20 战魂小筑 阅读(871) 评论(3)  编辑 收藏 引用 所属分类: 脚本技术程序调试技术

评论

# re: lua库使用经验一则 2009-07-20 16:25 AsEngineDev
问题不多见。共享很重要  回复  更多评论
  

# re: lua库使用经验一则 2009-07-20 19:11 Adrian
顶~  回复  更多评论
  

# re: lua库使用经验一则[未登录] 2009-08-21 16:41 Peter
呵呵..我也遇到过此类错误..
实际上是有程序中有多个lualib的实例  回复  更多评论
  


只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理