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\n", 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
posted on 2015-04-01 16:52  欢跳的心  阅读(1491)  评论(0编辑  收藏  举报