Linux下Lua调用c函数

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 文件如下:
 

#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.sode>

把libmylib.so copy到:/usr/lib  或/lib下面(系统寻找的路径)

#cp libmylib.c /usr/libde>

在lua下测试:

#lua5.1de>

>> package.loadlib("libmylib.so", "luaopen_mylib")()
> print(mylib.lsin(10))
-0.54402111088937
>

package.loadlib("libmylib.so", "luaopen_mylib")()

可以换成路径package.loadlib("/路径/libmylib.so", "luaopen_mylib")()


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值