編譯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