加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Lua 调用自定义C模块

发布时间:2020-12-14 22:07:25 所属栏目:大数据 来源:网络整理
导读:? ? ? 这是《Lua程序设计》中提到的,但是想成功执行,对于初学Lua的确没那么简单。这里涉及如何如何生成一个动态链接库so文件;Lua5.2中导出函数从LuaL_register变成了 LuaL_newlib。 对于具体的细节有待深入。这里的模块名是hello_lib,Lua解释器会根据名字


? ? ? 这是《Lua程序设计》中提到的,但是想成功执行,对于初学Lua的确没那么简单。这里涉及如何如何生成一个动态链接库so文件;Lua5.2中导出函数从LuaL_register变成了LuaL_newlib。对于具体的细节有待深入。这里的模块名是hello_lib,Lua解释器会根据名字找到对应的模块,而后执行其中的 luaopen_XXX方法。
代码:
#include <math.h>
#include <lua5.2/lua.h>
#include <lua5.2/lauxlib.h>
#include <lua5.2/lualib.h>

static int hello_sin(lua_State *L){
    double d = luaL_checknumber(L,1);
    lua_pushnumber(L,sin(d));
    return 1;
}

static const struct luaL_Reg hello_lib[] = {
    {"hello_sin",hello_sin},{NULL,NULL}
};

int luaopen_hello_lib(lua_State *L){
    luaL_newlib(L,hello_lib);
    //luaL_register(L,"hello_lib",hello_lib); // lua 5.1
    return 1;
}



在Lua中调用:
local hello = require "hello_lib"
print(hello.hello_sin(1))



执行过程和结果:

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读