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