编译lua动态库


编译lua解释器的时候要依赖于lua动态库来编译,不能编译成静态的,否则在调用c模块的时候就会出现 multiple Lua VMs detected 的错误。

multiple Lua VMs detected ,什么意思呢,就是说有多个虚拟机加载,起冲突了。

如果lua用静态来编译,就会加载一个虚拟机,当lua去调用c模块时,c模块在编译的时候是需要 conmmit 静态或者动态的lua库的,那么这时候也会加载一个lua虚拟机,所以自然就起了冲突,怎么办呢,其实很简单,只要lua和c库都调用同一个dll就好,dll是共享库,只会加载一次到内存,所以就不会出现冲突。

 

lua编译成动态库的方法:

在src目录下的Makefile添加下面规则:
LUA_SO=liblua.so
ALL_T= $(LUA_A) $(LUA_T) $(LUAC_T) $(LUA_SO)
$(LUA_SO): $(CORE_O) $(LIB_O)
     $(CC) -o $@ -shared $? -ldl -lm(这一行前是一个tab)

 

最后在顶层Makefile修改TO_LIB
TO_LIB= liblua.a liblua.so

 

 

 

参考来源:

http://blog.csdn.net/qq_30949367/article/details/51405331

http://blog.csdn.net/gaopeiliang/article/details/25894769

http://blog.chinaunix.net/uid-28295089-id-5062372.html


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM