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.函数名

lua study & c与lua相互调用_第1张图片

你可能感兴趣的:(lua study & c与lua相互调用)