我制作了一个C程序,并在其中编写了以下两个函数
1. int c_add(lua_State* L)
{...some code here...
}
2. int main(int argc, char* argv)
{...some code here...
lua_register(L, "c_add", c_add);
}
并通过以下命令成功编译它。
gcc -o test.exe test.c -I /home/ec2-user/install/lua-5.1.5/src -llua-5.1
但是在使用lua程序调用它之后显示了以下错误。
lua: func2.lua:2: attempt to call global 'c_add' (a nil value)
如何解决此问题?`
答案 0 :(得分:3)
您需要将代码编译为共享库,才能从外部Lua实例访问C函数。您不需要appsettings.json
函数,并将main
标志传递给gcc。然后,您需要通过实现以下函数来让Lua知道在调用-shared
时该怎么做:
require
这将创建一个单一的全局函数。最好向// same name as the so/dll
// v
LUALIB_API int luaopen_test(lua_State *L) {
lua_register(L, "c_add", c_add);
return 0;
}
注册一个luaL_Reg
函数数组:
luaL_register
以便static const luaL_Reg function_list[] = {
{"c_add", c_add},
{NULL, NULL}
};
LUALIB_API int luaopen_test(lua_State *L) {
luaL_register(L, "test", function_list);
return 1;
}
返回函数表:
require