gpt4 book ai didi

lua - 将 LuaJIT 模块嵌入 C 应用程序

转载 作者:行者123 更新时间:2023-12-04 12:08:57 24 4
gpt4 key购买 nike

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

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com