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

你可能感兴趣的:(lua)