将LuaJIT模块嵌入到C应用程序中

时间:2013-10-26 12:11:12

标签: lua luajit

在我的应用程序中,我从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

1 个答案:

答案 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.cModule.lua保持同步,例如使用Makefile配方,或者你会看到一些令人困惑的错误!