早前就用過LUA ,只是局部的小項目使用,突然興起想要寫1些關于LUA 的 文章,記錄曾學習過的點點滴滴。
這里我使用的是LUA5.2作為 案例
lua做為輕量級腳本語言已被廣泛利用到利用軟件和游戲開發中,相比Perl和python lua的內核 只有100KB左右
可以很容易嵌入到語言級別 就好像語言本身的功能1樣
以下來自百度全科:
Lua還具有其它1些特性:同時支持面向進程(procedure-oriented)編程和函數式編程(functional programming);自動內存管理;只提供了1種通用類型的表(table),用它可以實現數組,哈希表,集合,對象;語言內置模式匹配;閉包(closure);函數也能夠看作1個值;提供多線程(協同進程[4] ,并不是操作系統所支持的線程)支持;通過閉包和table可以很方便地支持面向對象編程所需要的1些關鍵機制,比如數據抽象,虛函數,繼承和重載等。
關于甚么是閉包?和如何使用閉包在下面這邊文章中有 javascript對應的閉包問題。相信很多前端工程師其實不陌生
閉包由于優缺點1直都是對半存在所以很多人是不建議程序中使用閉包的。
http://www.cnblogs.com/jeffwongishandsome/archive/2009/05/17/1458405.html 關于閉包的介紹
空話不多說,要使用LUA首先就要編譯 LUA的內核,linux下相當簡單
make
make install 就完事
windows下編譯進程以下
如果你要編譯靜態庫?
vs2010下首先創建以下 項目,記住去掉預編譯頭,由于lua是用C ,混合C/C++會造成預編譯頭沖突
創建不適用預編譯頭的 靜態庫 ,
導入lua代碼到項目文件,選擇你的lua代碼導入 直接生成便可
如果你要編譯動態庫?
基本步驟同上相同 你在創建的時候創建1個dll項目 , 或 直接修改項目屬性 生成dll
你現在編譯是編譯不過的 ?你要去掉你的預編譯選項!!! 不使用項目預編譯頭
這個時候你編譯 OK通過了 也生成了 DLL ,那末問題來了 現在 咋沒有生成.lib輸入庫呢!!!
實際上發現LUA內核導出函數都被聲明為LUA_API開頭
你需要添加幾個預編譯定義
LUA_BUILD_AS_DLL 這個告知預處理器 代碼依照DLL編譯 并且定義導入導出
LUA_CORE 這個告知預處理器 LUA_API 宏添加 上 dllexport導出定義 如果不添加就是直接使用dllimport
源代碼以下
1 #if defined(LUA_BUILD_AS_DLL) /* { */ 2 3 #if defined(LUA_CORE) || defined(LUA_LIB) /* { */ 4 #define LUA_API __declspec(dllexport) 5 #else /* }{ */ 6 #define LUA_API __declspec(dllimport) 7 #endif /* } */ 8 9 #else /* }{ */ 10 11 #define LUA_API extern 12 13 #endif /* } */
OK 到這里 你的LUA內核已編譯完了 可以開始學習LUA了