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