今天将部分工程从静态链接库改为动态链接库,并使用接口方式创建时,原来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中,将封装库放在静态库中,这样就绝对没有任何问题