在我的应用程序中,我拥有从 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
)
最佳答案
是的。
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 配方,否则您会看到一些令人困惑的错误! 关于lua - 将 LuaJIT 模块嵌入 C 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19606543/