Mac下 lua C模块的编写

我们已经看到如何在C文件中使用lua_register注册lua可以使用的函数,也了解了C函数和lua函数之间如何传递参数。再提升一步,我们还可以将一组C函数组成一个模块交给lua环境使用。看具体的例子:

mylualib.c


  1. #include <lua.h>
  2. #include <lauxlib.h>
  3. #include <lualib.h>

  4. static int hello_c (lua_State *L) {
  5.     const char * from_lua = lua_tostring(L,1);
  6.     printf("Lua: %s\n",from_lua);    
  7.     lua_pushstring(L,"Hi Lua, nice to meet you");
  8.     return 1;
  9. }
  10. static const struct luaL_Reg mylualib [] = {
  11.     {"hello_c", hello_c},
  12.     {NULL, NULL} /* sentinel */
  13. };
  14. int luaopen_mylualib (lua_State *L) {
  15.     /* register a array of c functions exported to lua */
  16.     luaL_newlib(L, mylualib);     
  17.     lua_pushvalue(L, -1);
  18.     lua_setglobal(L, "mylualib"); /* the module name */

  19.     return 1;
  20. }
需要说明的是Mac OS X需要使用gcc将mylualib.c编译为动态库,编译选项不同于Linux。
具体编译命令(粗体部分不同于Linux,如果不使用这些选项,liblua将会被编译到so文件中并引起“multiple lua vms detected”错误, bundle是Mac使用的文件格式):

gcc -c mylualib.c -I/usr/local/Cellar/lua/5.2.3_1/include 

gcc -O2 -bundle -undefined dynamic_lookup -o mylualib.so mylualib.o


生成的mylualib.so就是可以在lua环境使用的模块。

再看一下lua脚本引用mylualib模块的的方法:


my.lua


  1. require "mylualib"
  2. hi = mylualib.hello_c("Hi C, I'm Lua")
  3. print(hi)
文件第1行的作用就是引用mylualib模块。


最后看一下lua脚本执行的结果:

$ lua my.lua 

Lua: Hi C, I'm Lua

Hi Lua, nice to meet you


[注明:lua版本是5.2.1]

来自于:http://blog.csdn.net/hanhuili/article/details/8496927


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值