zoukankan      html  css  js  c++  java
  • code::blocks + C + lua 编译环境

    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.
    更详细的关于lua的请查阅其他资料,http://blog.csdn.net/zhangjingyangguang/article/details/5221691这里有一些。

  • 相关阅读:
    [转]关于Activity和Task的设计思路和方法
    关于Zipalign的介绍和使用方法
    [转]Android 技术专题系列之九 -- 图形系统
    【转】如何调试跟踪Android源代码
    为程序添加版本自动更新功能(转+详细分析)
    【转】在 Eclipse 內,用 Ant 編譯你的 Android 程式
    android 用HttpURLConnection读网络
    步步为营 .NET 设计模式学习笔记 十、Builder(建造者模式)
    步步为营 .NET 设计模式学习笔记 八、State(状态模式)
    步步为营 .NET 设计模式学习笔记 十四、Decorator(装饰模式)
  • 原文地址:https://www.cnblogs.com/ikodota/p/codeblocks_c_lua.html
Copyright © 2011-2022 走看看