lua學習:lua環境搭建

來源:互聯網
上載者:User

Lua除了是一門擴充的言語外,還是一門“膠水語言”。最著名的就是作為遊戲的指令碼開發。

這裡主要說lua怎樣與c互動。

Lua和c語言通訊的主要方法是一個無所不在的虛擬棧。幾乎所有的API調用都會操作這個棧上的值。所有的資料交換,無論是Lua到C語言或C語言到Lua都通過這個棧來完成。棧可以解決Lua和C語言之間存在的兩大差異,第一種差異是Lua使用垃圾收集,而C語言要求顯式地釋放記憶體;第二種是Lua使用動態類型,而C語言使用靜態類型。


下載好Lua源碼,可以選擇在不同的平台編譯,編譯也很簡單,下面是在windows下的編譯方法。(我用的是lua5.1,感覺新版本變化很大,相應的教程也沒有5.1的多。)

1.開啟vs的命令列工具,工具-->visual studio 2005 command prompt
2.跳轉到 etc的上一級目錄,如:cd /d d:\lua
2.執行:etc\luavs.bat( 注意,是 \ 不是 /,寫錯了不能執行編譯 )
3.然後lua51.dll, lua51.lib, lua.exe, and luac.exe就產生在 src路徑下了。
當然,也可以自訂組建檔案的名字,具體請看luavs.bat。

然後就可以編寫第一個c與lua互動的程式。

#include <stdio.h>#include <string.h>extern "C" {#include "lua.h"#include "lauxlib.h"#include "lualib.h"}#pragma comment(lib, "lua.lib")int main(void){char buff[256];int error;lua_State *L = luaL_newstate();//建立一個新的環境luaL_openlibs(L);//開啟標準庫while(fgets(buff,sizeof(buff),stdin)!=NULL){error = luaL_loadbuffer(L,buff,strlen(buff),"line") || lua_pcall(L,0,0,0);if (error){fprintf(stderr,"%s",lua_tostring(L,-1));lua_pop(L,1);//從棧中彈出錯誤訊息}}lua_close(L);return 0;}

標頭檔lua.h定義了lua提供的基礎函數,包括建立lua環境、調用lua函數(如lua_pcall)、讀寫lua環境中全域變數,以及註冊供lua調用的新函數等。Lua.h中定義所有內容都有一個lua_首碼。

標頭檔lauxlib.h定義了輔助庫(auxiliary library,auxlib)提供的函數。它的所有定義都以luaL_開頭(如luaL_loadbuffer)。輔助庫是一個使用lua.h中API編寫出的一個較高的抽象層。Lua的所有標準庫編寫都用到了輔助庫。

注意:Lua指令碼的編譯執行是相互獨立的,在不同的線程上執行。通過luaL_newstate()函數可以申請一個虛擬機器,返回指標類型lua_State。今後其他所有Lua Api函數的調用都需要此指標作為第一參數,用來指定某個虛擬機器。所以lua_State代表一個lua虛擬機器對像,luaL_newstate()分配一個虛擬機器。lua類庫管理著所有的虛擬機器。銷毀指定虛擬機器的所有對像(如果有記憶體回收相關的無方法則會調用該方法)並收回所有由該虛擬機器動態分配產生的記憶體,在有些平台下我們不需要調用此函數,因為當主程式退出時,資源會被自然的釋放掉,但是但一個長時間啟動並執行程式,比如後台啟動並執行web伺服器,需要立即回收虛擬機器資源以避免記憶體過高佔用。

因為lua5.0到lua5.2介面略有變化,環境搭建也略有不同,詳情看源碼下的README。

擴充閱讀:

Lua 5.1 參考手冊:http://www.codingnow.com/2000/download/lua_manual.html

lua users wiki:http://lua-users.org/wiki/


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.