lua是一个脚本语言,它的编译器非常简单。一般而言,lua在游戏里面使用得比较多。它可以通过类似于脚本的形式把函数的功能串行起来,实现很多不可思议的效果。现在关于lua的资料比较少,主要有两个文档可以介绍一下。一个是云风翻译的lua手册,另外一本就是lua作者编写的《Programming in lua》。可是很多朋友看完了这两本资料之后还是不太清楚该怎么使用。今天乘着有空,可以把自己的一些使用经验来写一写。 我们可以把lua看成是lib库,在使用的时候把这个lib添加到自己的工程里面就可以了。这里介绍的方法是windows下用code::blocks编译lua的方法,因为code::blocks是跨平台的,linux下编译方法也差不过。

(1)下载lua工程,下载地址为http://www.lua.org/ftp/,可以选择一个比较新的版本,太旧的版本语法不一样,我选择的是最新的lua-5.2.1.tar.gz);
(2)在code::blocks中新建一个Dynameic Link Library工程,名为lua_dll。将(1)中下载的文件解压到工程路径下,并在工程中添加src下的文件;
(3)将lua.c中的main函数修改为lua_main,将luac.c中的main函数修改为luac_main;
(4)编译后生成lua_dll.dll;
(5)再新建一个Console application工程,名为Test_lua
(6)选择工程后->Build options,Linker settings->link librarys中添加 lua_dll.dll,在Search directiories -> Compiler 中添加 lua 的源代码目录,如(D:\lua-5.2.1\src);
(7)在main.c中编辑代码:

#include <stdio.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:\\__Development\\C\\delve\\Test_lua\\test.lua");
    lua_close(L);

    return 0;
}

(8)此时,我们还需要创建test.lua文件,内容如下,

 

function show()
    local b = {}
    local index

    for index = 1,10,1 do
        print(index)
    end
end

show()

(9)编译执行后,输出1,2,3,4,5,6,7,8,9,10就表示成功了。

这样就结束了吗?没有,我们目前做的是编一个lib,然后其他工程中使用这个lib来执行lua,我们也可以直接用lua 的源代码加入项目来编译。

(1)建立Console application工程,名为Test_lua_with_src;
(2)把lua的src文件夹复制到工程下面,并更名src为lua_src;
(3)在工程中添加lua_src目录(Add files recursively... );
(4)将lua.c中的main函数修改为lua_main,将luac.c中的main函数修改为luac_main;
(5)main.c中与上面差不多,只是修改一下头文件路径,注意test.lua的位置。

#include <stdio.h>
#include "lua_src/lua.h"
#include "lua_src/lualib.h"
#include "lua_src/lauxlib.h"
#include "lua_src/luaconf.h"

(5)直接编译即可

 

第二种方法可以更方便的修改lua自身的代码来扩展lua,也不需要建立工程的时候添加lib和.h路径。

--------------------------------------------------------------------------------------------------------------

上面的代码只是执行了一个lua程序,与lua进行交互,参考一个测试代码;

#include <stdio.h>

#include "lua_src/lua.h"
#include "lua_src/lualib.h"
#include "lua_src/lauxlib.h"
#include "lua_src/luaconf.h"


int main(int argc, char *argv[]) {
char buff[256];
    int error;
    lua_State* L = luaL_newstate();
    luaL_openlibs(L);
    //luaopen_base(L);
    //luaopen_table(L);
    //luaopen_io(L);
    //luaopen_string(L);
    //luaopen_math(L);
    //printf("xxxx\n");
    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的语句,例如:print(1+2) ,返回结果为3.