作為一個腳本愛好者,而且是腳本(Perl)起家的我,一有空就喜歡學習下這些腳本語言。據說魔獸世界、憤怒小鳥都用到了它,所以今天研究下Lua這個叫法有點奇特的腳本
【轉載請注明出處:http://blog.csdn.net/longlong530】
一.Lua簡介
Lua 是一個小巧的腳本語言。作者是巴西人(好像還沒有接觸過巴西人~)。該語言的設計目的是為了嵌入應用程序中,從而為應用程序提供靈活的擴展和定制功能。Lua腳本可以很容易的被C/C++代碼調用,也可以反過來調用C/C++的函數,這使得Lua在應用程序中可以被廣泛應用。不僅僅作為擴展腳本,也可以作為普通的配置文件,代替XML,Ini等文件格式,並且更容易理解和維護。
Lua由標准C編寫而成,代碼簡潔優美,幾乎在所有操作系統和平台上都可以編譯,運行。一個完整的Lua解釋器不過200k,在目前所有腳本引擎中,Lua的速度是最快的。這一切都決定了Lua是作為嵌入式腳本的最佳選擇。
二.源碼下載
LUA源碼下載:http://www.lua.org/ftp/lua-5.2.2.tar.gz
參考手冊: http://www.ostools.net/apidocs/apidoc?api=lua
中文教程(年代有點久遠了,不過語法應該差不多):http://wenku.baidu.com/view/cbe028533c1ec5da50e270ea.html
我的入門例子:http://download.csdn.net/detail/longlong530/5670567
網上還有個所謂15分鍾入門的教程,也不錯:http://www.oschina.net/translate/learn-lua-in-15-minutes
三.源碼編譯:
1.VS2010新建一個工程,導入源碼src文件夾下的所有代碼;
2.配置: 配置屬性 --> 常規 --> 配置類型 --> 選擇 “靜態庫(.lib)”
3.配置: C/C++ --> 高級 --> 編譯為 --> 選擇“編譯為C++代碼(/TP)”,否則使用lua lib庫的時候會報下面的鏈接錯誤:
error LNK1120: 5 個無法解析的外部命令 error LNK2019: 無法解析的外部符號 "int __cdecl lua_pcallk(struct lua_State *,int,int,int,int,int (__cdecl*)(struct lua_State *))" (?lua_pcallk@@YAHPAUlua_State@@HHHHP6AH0@Z@Z),該符號在函數 _main 中被引用 error LNK2019: 無法解析的外部符號 "int __cdecl luaL_loadfilex(struct lua_State *,char const *,char const *)" (?luaL_loadfilex@@YAHPAUlua_State@@PBD1@Z),該符號在函數 _main 中被引用 error LNK2019: 無法解析的外部符號 "struct lua_State * __cdecl luaL_newstate(void)" (?luaL_newstate@@YAPAUlua_State@@XZ),該符號在函數 _main 中被引用 error LNK2019: 無法解析的外部符號 "void __cdecl lua_close(struct lua_State *)" (?lua_close@@YAXPAUlua_State@@@Z),該符號在函數 _main 中被引用 error LNK2019: 無法解析的外部符號 "void __cdecl luaL_openlibs(struct lua_State *)" (?luaL_openlibs@@YAXPAUlua_State@@@Z),該符號在函數 _main 中被引用
4.將lua.c中的main函數修改為lua_main,將luac.c中的main函數修改為luac_main;
5.直接編譯,生成lualib.lib靜態庫。
四.lua靜態庫的使用
1.新建一個項目,引入lua的頭文件和靜態庫
2.編寫luaTest.cpp:
#include <stdio.h> #include <stdlib.h> #include "lua.h" #include "lualib.h" #include "lauxlib.h" #include "luaconf.h" int main(int argc, char* argv[]) { lua_State* L = luaL_newstate(); luaL_openlibs(L); luaL_dofile(L, "D://WorkSpace//Lua//test.lua"); lua_close(L); system("pause"); return 0; }
3.再編寫一個test.lua腳本
function show() local b = {} local index for index = 1,10,2 do print(index) end end show()
4.編譯運行后,即可顯示C++調用該lua腳本的結果:
就這樣,愉快的入門Lua了,哈哈~當然Lua如此流行,必定有他更多的強人之處,后面工作中如果遇到可深入學習,語法稍微花點時間瀏覽下,多用用就熟悉了。
最后,上一張Log~