Вам необходимо скомпилировать код в виде разделяемой библиотеки, чтобы получить доступ к функциям C из внешнего экземпляра Lua.Вам не нужна функция main
, и вы передаете флаг -shared
в gcc.Затем вам нужно сообщить Lua, что делать, когда вызывается 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
:
local my_c_functions = require("test")
print(my_c_functions.c_add(42, 42))