使用Lua调用C(在Linux中)

时间:2018-12-20 05:48:38

标签: lua

我制作了一个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)  

如何解决此问题?`

1 个答案:

答案 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