1. Lua5.1 版本
2. Linux 是企业版5
(Lua5.1在老版本Linux使用时会出现readline找不到的错误更新一下readline就可以了)
3. 使用动态连接库的方式调用c函数
下面开始建立一个共享库:
1. 新建一个.c的文件
2. 编写动态连接库,保持为mylib.c
3. 定义库函数,这里以pil的lsin函数,输出传入参数的sin()值
4. 定义luaL_reg数组,这个是注册一系列公开给lua调用的函数数组. 数组最后一个元素必须是 {NULL, NULL} 的luaL_reg结构用来做结束标识.
6. 用luaL_openlib声明主函数
mylib.c 文件如下:
|
#include <math.h> #include "lua.h" #include "lualib.h" #include "lauxlib.h"
static int l_sin (lua_State *L) { double d = luaL_checknumber(L, 1); lua_pushnumber(L, sin(d)); return 1; /* number of results */ }
static const struct luaL_reg mylib [] = { {"lsin", l_sin}, {NULL, NULL} /* 必须以NULL结尾 */ };
int luaopen_mylib (lua_State *L) { luaL_openlib(L, "mylib", mylib, 0); return 1; }
|
编译mylib.c为共享库文件(共享库命名规则:libxxx.so xxx为名字)
|
#gcc mylib.c -fPIC -shared -o libmylib.so
|
把libmylib.so copy到:/usr/lib 或/lib下面(系统寻找的路径)
在lua下测试:
|
#lua5.1
> package.loadlib("libmylib.so", "luaopen_mylib")() > print(mylib.lsin(10)) -0.54402111088937 >
|
package.loadlib("libmylib.so", "luaopen_mylib")()
可以换成路径package.loadlib("/路径/libmylib.so", "luaopen_mylib")()