本文介绍lua如何调用c方法

编写c

#include <lua.h>
#include <lauxlib.h>
#include <lualib.h>

static int echo(lua_State* L) {
    const char* str = lua_tostring(L, 1);
    lua_pushstring(L, str);
    return 1;
}

static const struct luaL_Reg mapper[] = {
    {"echo", echo},
    {NULL, NULL}
};

extern int luaopen_hello(lua_State* L)
{
    luaL_newlib(L, mapper);
    return 1;
}
  • luaopen_后面的命名要与so名称一致
  • 5.2版本可能没有luaL_newlib,需要使用luaL_openlib替代,如下
luaL_openlib(L, "hello", mapper, 0);

编译so

gcc hello.c -shared -o hello.so -llua

运行

smou:luac $ lua -i
Lua 5.3.4  Copyright (C) 1994-2017 Lua.org, PUC-Rio
> hello=require 'hello'
> hello.echo('123')
123
>