Linux下Lua调用c函数
2012-08-29 19:21
591 查看
http://blog.163.com/dang_wenyun/blog/static/42206525200911317247238/
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 文件如下:
编译mylib.c为共享库文件(共享库命名规则:libxxx.so xxx为名字)
把libmylib.so copy到:/usr/lib 或/lib下面(系统寻找的路径)
在lua下测试:
package.loadlib("libmylib.so",
"luaopen_mylib")()
可以换成路径package.loadlib("/路径/libmylib.so",
"luaopen_mylib")()
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; } |
#gcc mylib.c -fPIC -shared -o libmylib.sode> |
#cp libmylib.c /usr/libde> |
#lua5.1de> >> package.loadlib("libmylib.so", "luaopen_mylib")() > print(mylib.lsin(10)) -0.54402111088937 > |
"luaopen_mylib")()
可以换成路径package.loadlib("/路径/libmylib.so",
"luaopen_mylib")()
相关文章推荐
- linux下Lua调用C函数
- C函数调用机制(x86的linux环境下)
- Redis进阶实践之八Lua的Cjson在Linux下安装、使用和用C#调用Lua脚本
- Lua中调用C函数(lua-5.2.3)
- Step By Step(Lua调用C函数)
- Lua中调用C函数(lua-5.2.3)
- C函数调用机制(x86的linux环境下)
- qt4中如何调用C函数(linux下)
- Redis进阶实践之八Lua的Cjson在Linux下安装、使用和用C#调用Lua脚本
- Step By Step(Lua调用C函数)
- Lua调用C函数
- lua调用C函数
- Step By Step(Lua调用C函数)
- linux下C函数调用机制(X86平台)
- Linux下编写Lua扩展so文件和调用方法实例
- LUA函数和C函数的相互调用
- 快速掌握Lua 5.3 —— 从Lua中调用C函数
- (Lua调用C函数)
- linux下C调用lua的第一个程序
- Linux上从Java程序中调用C函数