lua study & c与lua相互调用

http://www.cnblogs.com/stephen-liu74/category/360139.html


1. 编译C调用lua的程序:

gcc test.c -lm -ldl -llua

其中的各个库分别为数学库,动态库,lua库


2. 编译lua调用c的程序:

1)c程序中不能含有extern "C"

具体见:http://www.cnblogs.com/skynet/archive/2010/07/10/1774964.html

2)编译动态库

gcc  test.c -fPIC -shared -o testlib.so

注意这里的-shared不能搞错,如果换成-c会出现编译错误:

 only ET_DYN and ET_EXEC can be loaded stack traceback

3) 在c代码中注册函数可以:

 lua_register(
                L,               /* Lua state variable */
                "square",     /* func name as known in Lua */
                isquare          /* func name in this file */
);
来直接注册单个函数。

使用时直接调用函数名。


或者:


static luaL_Reg mylibs[] = { 
     {"add", add},
     {"sub", sub},
     {NULL, NULL} 
 };
 const char* libName = "mytestlib"   
 luaL_register(L,libName,mylibs);
 一起注册,但是只用于版本5.1及以下在5.2中使用会出现undefined symbol: luaL_register错误。

使用时调用库名.函数名


或者:


 lua_newtable(L);
  luaL_setfuncs(L, mylibs, 0); 
  版本5.2使用。

  使用时
  local clib = require "libname"
  调用clib.函数名


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值