参考: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