博客首页 注册 建议与交流 排行榜 加入友情链接
推荐 投诉 搜索: 帮助

苦丁茶

tomcent.cublog.cn
Linux下Lua调用c函数
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下面(系统寻找的路径)

#cp libmylib.c /usr/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")()

发表于: 2008-01-07,修改于: 2008-01-07 10:42,已浏览344次,有评论0条 推荐 投诉

给我留言
版权所有 ChinaUnix.net 页面生成时间:0.00919