tolua++和wax混合使用时tolua全局对象被覆盖的问题

最近项目中遇到一个奇怪的问题,由于项目代码逻辑需要用到tolua++里暴露的tolua.cast来实现类型转换,在windows的vs环境下调试式没有问题,但是在ios或者mac上调试xcode工程时,发现tolua变成了一个function,而不是一个对象,很让人奇怪。追查发现在lua引擎启动时,有一个针对IOS或者Mac条件编译宏,当在IOS或Mac下时,会调用wax.h中的wax_start函数,追入到该函数(位于wax.m)文件时,发现其调用的wax_setup调用了一个叫做addGlobals()的函数。继续跟踪addGlobals()函数发现,在其中注册了一个wax.m中的函数,而该函数的名字也恰恰叫做tolua,因此覆盖了在此之前tolua_map.c中的tolua_open函数里注册的tolua模块,导致该上述奇怪问题的产生,解决办法也很简单,wax.m的该注册注释掉或者改下函数名注册,但是会不会引起其他问题暂时还不确定,还有待考察。所以有时候对lua或者js这类语言有时候很容易出现全局函数覆盖的问题,所以最好的编码风格还是注册全局函数或者变量的时候要缀上命名空间前缀才能很大程度上的避免此类问题

你可能感兴趣的:(tolua++和wax混合使用时tolua全局对象被覆盖的问题)