• lua调用c函数


    参考:http://blog.163.com/madahah@126/blog/static/170499225201121504936823/

    1、编辑C程序

     vim luac.c

    #include <stdio.h>
    #include <lua.h>
    #include <lualib.h>
    #include <lauxlib.h>
    
    LUALIB_API int luaopen_mylib(lua_State *L );
    
    //自定义函数
    static int my_add(lua_State *L) 
    {
        int x = lua_tonumber(L,1); //第一个参数,转换为数字
        int y = lua_tonumber(L,2); //第二个参数,转换为数字
        int sum = x + y;
        lua_pushnumber(L, sum);
        return 1; //返回sum计算结果
    }
    
    static int showstr(lua_State *L) 
    {
       //从lua中传入的第一个参数
       const char *str = lua_tostring (L, 1); 
    
       printf ("c program str = %s
    ", str);
       return 0;
    }
    
    //函数列表
    static struct luaL_reg funclist[] =
    {
        {"add", my_add}, //my_add()函数,lua中访问时使用名称为add
        {"show", showstr}, //showstr()函数,lua中访问时使用名称为show
        {NULL, NULL}  //最后必须有这个
    };
    
    //注册函数列表方便扩展
    //我们编译后的动态库名称为mylib.so
    LUALIB_API int luaopen_mylib(lua_State *L )
    {
        luaL_register(L, "mylibfunc", funclist); //lua中使用mylibfunc.add访问my_add函数
        return 1;
    }
    
    #if 0
    //直接注册一个函数
    LUALIB_API int luaopen_mylib(lua_State *L )
    {
        lua_register(L, "add", my_add);
        return 1;
    }
    #endif
    

    2、编辑lua程序

    require "mylib"
    local sum = mylibfunc.add(3,9)
    print("sum=",sum)
    local str = mylibfunc.show("haha")

    3、编译C程序为动态库

    gcc luac.c -shared -fPIC -o mylib.so -I /usr/local/lj2/include/luajit-2.0/

    4、运行测试lua调用C程序

    lua t.lua
    输出如下:
    sum= 12
    c program str = haha
  • 相关阅读:

    守护线程
    下载图片
    多线程
    self的作用
    设置项目地址环境
    对象 类
    ValueError: urls must start with a leading slash
    mock挡板接口开发
    K&R——第五章 指针与数组
  • 原文地址:https://www.cnblogs.com/etangyushan/p/4384368.html
Copyright © 2020-2023  润新知