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