您的位置:首页 > 运维架构 > Linux

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

#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")()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: