編譯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
編譯靜態庫編譯動態庫
編譯靜態庫 cr標誌告訴ar將object檔案封裝 archive 我們可以使用nm s 命令來檢視.a檔案的內容 ar cr libmyhello.a hello.o 或 cvr 編譯動態庫 gcc c fpic test1.c gcc c fpic test2.c fpic告訴gcc將源 編譯成...
lua調c動態庫
lua 指令碼調c 動態庫函式時開始調不成功,通過 lua官方的 mail list 才知道 c動態庫里的註冊函式和 lua指令碼的開啟庫的方式要一致。1.c動態庫的 static int lua msgbox lua state l int declspec dllexport luaopen d...
編譯 Lua 的 zlib 庫 lua zlib
最近需要使用 lua 給 wireshark 寫個外掛程式 dissector 苦於基於 c 的文件實在是太少了,乾脆就用 lua 來寫。但是 lua 也真是夠 輕量 的,官方都沒有個支援 zlib 壓縮 解壓的庫。最後終於找到了 lua zlib url 可以支援實時的流 stream 壓縮 解壓...