编译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