lua添加自定义模块的步骤
以下方法在lua 5.2.4版本下成功实现:
1. lua.c为所有函数的主程序,参考Makefile的编译链接
2. lua.c中
int main (int argc, char **argv) {
…
/* call 'pmain' in protected mode */
lua_pushcfunction(L, &pmain);
…
}
static int pmain (lua_State *L) {
...
luaL_openlibs(L); /* open libraries */
...
}
3. linit.c中
static const luaL_Reg loadedlibs[] = {
{"_G", luaopen_base},
{LUA_LOADLIBNAME, luaopen_package},
{LUA_COLIBNAME, luaopen_coroutine},
{LUA_TABLIBNAME, luaopen_table},
{LUA_IOLIBNAME, luaopen_io},
{LUA_OSLIBNAME, luaopen_os},
{LUA_STRLIBNAME, luaopen_string},
{LUA_BITLIBNAME, luaopen_bit32},
{LUA_MATHLIBNAME, luaopen_math},
{LUA_DBLIBNAME, luaopen_debug},
{LUA_LOADMYLIBNAME, luaopen_mypackage},
{NULL, NULL}
};
4. lualib.h中
...
#define LUA_LOADLIBNAME "package"
LUAMOD_API int (luaopen_package) (lua_State *L);
#define LUA_LOADMYLIBNAME "mypackage"
LUAMOD_API int (luaopen_mypackage) (lua_State *L);
/* open all previous libraries */
LUALIB_API void (luaL_openlibs) (lua_State *L);
...
5. myloadlib.c中
...
static int printhelloworld (lua_State *L) {
printf("[mypackage] hello world\n");
return 0;
}
static int myadd (lua_State *L) {
printf("%d %d\n", (int)luaL_checknumber(L, 1), (int)luaL_checknumber(L, 2));
lua_pushnumber(L, (int)luaL_checknumber(L, 1) + (int)luaL_checknumber(L, 2));
return 1;
}
static const luaL_Reg my_funcs[] = {
{"printhelloworld", printhelloworld},
{"myadd", myadd},
{NULL, NULL}
};
LUAMOD_API int luaopen_mypackage (lua_State *L) {
/* create `package' table */
luaL_newlib(L, my_funcs);}
return 1;
}
6. Makefile中
...
LIB_O= lauxlib.o lbaselib.o lbitlib.o lcorolib.o ldblib.o liolib.o \
lmathlib.o loslib.o lstrlib.o ltablib.o loadlib.o myloadlib.o linit.o
...
myloadlib.o: myloadlib.c lua.h luaconf.h lauxlib.h lualib.h
...
7. lua中调用
function helloworld()
mypackage.printhelloworld();
print(mypackage.myadd(11,222));
end
lua添加自定义模块的步骤的更多相关文章
- Framework/base 下添加自定义模块的步骤
在Android源码编译成功的基础上,重新编译带自己API的android.jar需要进行以下几个步骤操作:1.添加自己的源代码,在android源码的frameworks/base目录下新建一个文件 ...
- lua对模块接口扩展的一种方法
module lua中模块的实现,对于使用者来说就是一个库,引用此库后,可以调用库中实现的任意函数. 使用库,可以将一类功能相关的接口做封装,并提供开放接口. 参考: http://blog.codi ...
- Lua中模块初识
定义了两个文件: Module.lua 和 main.lua 其中,模块的概念,使得Lua工程有了程序主入口的概念,其中main.lua就是用来充当程序主入口的. 工程截图如下: Module.lua ...
- linux 模块编译步骤(原)
linux 模块编译步骤(原) 博主推荐:<Linux命令模板Licote(原)> 本文将直接了当的带你进入linux的模块编译.当然在介绍的过程当中,我也会添加一些必要的注释,以便初学者 ...
- lua不同模块调用
一.起因 由于准备把lua加入的系统中,还需把字符串解析json.下了个json的lua,目前还没有搞定.但是一个lua,调用其他lua文件模块,目前刚刚搞定. 暂作记录. 二. 模块调用测试 1. ...
- lua 13 模块(类似class)与包
转自: http://www.runoob.com/lua/lua-modules-packages.html 模块类似于一个封装库,从 Lua 5.1 开始,Lua 加入了标准的模块管理机制,可以把 ...
- Nginx Lua拓展模块操作Redis、Mysql
# Nginx的拓展模块 # ngx_lua模块 # 淘宝开发的ngx_lua模块通过lua解释器集成近Nginx,可以采用lua脚本实现业务逻辑,由于lua的紧凑.快速以及内建协程,所以在保证宝兵法 ...
- lua的模块加载require
加载指定的模块.首先函数会在 package.loaded 这个表中查看是否已经加载 了 modname 这个模块.如果是,那么 require 会返回保存在 package.loaded[modna ...
- 使用lua graphql 模块让openresty 支持graphql api
graphql 是一个很不错的api 查询标准语言,已经有一个lua 的版本支持graphql 项目使用docker&&docker-compose 运行 环境准备 模块安装 lu ...
随机推荐
- 015_使用 expect 工具自动交互密码远程其他主机安装 httpd 软件
#!/bin/bash#删除~/.ssh/known_hosts 后,ssh 远程任何主机都会询问是否确认要连接该主机rm -rf ~/.ssh/known_hostsexpect <<E ...
- Luogu [P3622] [APIO2007]动物园
题目链接 比较费脑子的一道题 先说题目核心思想 : 状压dp 环的处理我们先不管. 我们设 dp[j][s] 表示 到达动物 j 且 [ j , j+5) 这五个动物状态为s时 最多能使多少小朋友开心 ...
- nodejs基础(管道、流)实现:复制、压缩、加密、解压,解密,写入文件
stream流 都是events.EventEmitter的一个实例,都可以来创建自定义事件(也就是说,流是一个事件的实例) 在nodejs中 对http的请求与响应都是用流来实现的,请求就是一个输入 ...
- openpyxl模块(excel操作)
openpyxl模块介绍 openpyxl模块是一个读写Excel 2010文档的Python库,如果要处理更早格式的Excel文档,需要用到额外的库,openpyxl是一个比较综合的工具,能够同时读 ...
- 文件对比工具 Beyond Compare 4.2.9中文破解版for mac
链接:https://pan.baidu.com/s/1AsESVIYsn9Lv6qz2TfROrQ 密码:6o63链接:https://pan.baidu.com/s/1eiGgRHfPTEERlH ...
- reGeorg(不需要外网ip的代理)
reGeorg _____ ______ __|___ |__ ______ _____ _____ ______ | | | ___|| ___| || ___|/ \| | | ___| | \ ...
- ICEM—三分之一风扇
原视频下载地址:https://yunpan.cn/cSwYBI6sb9vHS 访问密码 9059
- 外部连接mysql docker容器异常
为了方便,使用python测试连接mysql容器 脚本内容非常简单 #!/usr/bin/python3 import pymysql conn=pymysql.connect(host=,passw ...
- Coarse-to-Fine超分辨率相关
1.A Coarse-to-Fine Subpixel Registration Method to Recover Local Perspective Deformation in the Appl ...
- 用jeecg做个项目第二讲(Datagrid数据列表效果详解)
1.列表界面 2.流程状态的效果 <t:dgCol title="流程状态" field="bpmStatus" queryMode="sing ...