以下方法在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添加自定义模块的步骤的更多相关文章

  1. Framework/base 下添加自定义模块的步骤

    在Android源码编译成功的基础上,重新编译带自己API的android.jar需要进行以下几个步骤操作:1.添加自己的源代码,在android源码的frameworks/base目录下新建一个文件 ...

  2. lua对模块接口扩展的一种方法

    module lua中模块的实现,对于使用者来说就是一个库,引用此库后,可以调用库中实现的任意函数. 使用库,可以将一类功能相关的接口做封装,并提供开放接口. 参考: http://blog.codi ...

  3. Lua中模块初识

    定义了两个文件: Module.lua 和 main.lua 其中,模块的概念,使得Lua工程有了程序主入口的概念,其中main.lua就是用来充当程序主入口的. 工程截图如下: Module.lua ...

  4. linux 模块编译步骤(原)

    linux 模块编译步骤(原) 博主推荐:<Linux命令模板Licote(原)> 本文将直接了当的带你进入linux的模块编译.当然在介绍的过程当中,我也会添加一些必要的注释,以便初学者 ...

  5. lua不同模块调用

    一.起因 由于准备把lua加入的系统中,还需把字符串解析json.下了个json的lua,目前还没有搞定.但是一个lua,调用其他lua文件模块,目前刚刚搞定. 暂作记录. 二. 模块调用测试 1. ...

  6. lua 13 模块(类似class)与包

    转自: http://www.runoob.com/lua/lua-modules-packages.html 模块类似于一个封装库,从 Lua 5.1 开始,Lua 加入了标准的模块管理机制,可以把 ...

  7. Nginx Lua拓展模块操作Redis、Mysql

    # Nginx的拓展模块 # ngx_lua模块 # 淘宝开发的ngx_lua模块通过lua解释器集成近Nginx,可以采用lua脚本实现业务逻辑,由于lua的紧凑.快速以及内建协程,所以在保证宝兵法 ...

  8. lua的模块加载require

    加载指定的模块.首先函数会在 package.loaded 这个表中查看是否已经加载 了 modname 这个模块.如果是,那么 require 会返回保存在 package.loaded[modna ...

  9. 使用lua graphql 模块让openresty 支持graphql api

      graphql 是一个很不错的api 查询标准语言,已经有一个lua 的版本支持graphql 项目使用docker&&docker-compose 运行 环境准备 模块安装 lu ...

随机推荐

  1. 客户端xml

    package lct.conference.common; import java.io.IOException;import java.io.PrintWriter;import java.net ...

  2. 更改用户id 和组id

    转自 http://blog.csdn.net/todd911/article/details/16370577 在unix系统中,特权是基于用户和组ID的,当程序需要增加特权,或需要访问当前并不允许 ...

  3. 2018CCPCFINAL B Balance of the Force 枚举最大值

    题意 n个人能选择黑暗面和光明面,选择两个面分别能获得\(L_i\)和\(R_i\)的力量,有m对人不能选择同一面,问n个人的力量中的最大值-最小值尽可能小为多少. \(1<=n<=2\t ...

  4. Linux之创建多个子进程

    /*** fork_test.c ***/ #include<stdio.h> #include<stdlib.h> #include<unistd.h> int ...

  5. Eclipse修改为中文版

    1.打开浏览器访问 https://www.eclipse.org/babel/downloads.php 复制语言包的url地址,我选择最新的 2.打开eclipse,依次选择菜单栏“Help - ...

  6. Linux之破解root密码

    破解CentOs6的root口令 进入单用户模式 重启后在下面界面按任意键   进入此界面后“ a ”在下面界面   输入1 进入单用户模式1之前有空格  按回车键进入命令行执行passwd命令直接修 ...

  7. netframework webapi IogAttribute记录request参数和错误信息

    参考博客 https://www.cnblogs.com/hnsongbiao/p/7039666.html 书写LogFilterAttribute public class LogFilterAt ...

  8. mysql 调优 (转)

    原文:https://mp.weixin.qq.com/s__biz=MzI4NTA1MDEwNg==&mid=2650763421&idx=1&sn=2515421f09c1 ...

  9. faster-rcnn 测试自己数据集训练的模型

    python demo_2019051601.pyTraceback (most recent call last): File "demo_2019051601.py", lin ...

  10. OpenNESS,开源的边缘网络服务平台

    目录 文章目录 目录 参考文章 OpenNESS 的电梯间演讲 OpenNESS 与 ETSI MEC Edge Controller Software 的功能清单 Edge Platform Sof ...