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

posted @ 2017-11-14 15:00  lianye920129  阅读(3391)  评论(0编辑  收藏  举报