码迷,mamicode.com
首页 > 其他好文 > 详细

lua调用c函数

时间:2015-04-01 19:05:50      阅读:157      评论:0      收藏:0      [点我收藏+]

标签:

参考: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调用c函数

标签:

原文地址:http://www.cnblogs.com/etangyushan/p/4384368.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!