在我的应用程序中,我从C后端公开了所有Lua库.现在,我需要加载一个Lua模块.对此的方法似乎是:
lua_getglobal(L, "require");
lua_pushstring(L, libname);
lua_pcall(L, 1, 0, 0);
Run Code Online (Sandbox Code Playgroud)
将搜索package.path以查找<libname>.lua并加载它.
是否可以将Lua模块内置到C应用程序中(以便模块成为C应用程序的一部分)?所以我不必单独打包Lua模块.不知何故,我无法找到任何参考或示例!:(
ps我正在使用LuaJIT-2.0.2,有问题的库是SciLua/Time(使用ffi)
是.
luajit -b Module.lua Module_bc.c
Run Code Online (Sandbox Code Playgroud)
将模块编译为字节码并输出包含该字节码的C数组初始化器.如果您使用共享库进行构建并从主可执行文件导出此数组,require则会找到它(并且不需要查找Module.lua.)
要测试它是否正常工作,请在模块package.path = ""之前进行设置require.如果它仍然有效,您知道预加载正在运行,它不仅仅使用Module.lua当前目录中的文件.
http://luajit.org/running.html
其他要记住的事项:
io.open),则该文件仍然需要存在.例如,一些ffi模块尝试打开C头文件,传递给ffi.cdefModule_bc.c同步Module.lua,例如使用Makefile配方,否则你会看到一些令人困惑的错误!