如何将 Lua 脚本编译成单个可执行文件,同时还能获得 LuaJIT 的超快性能优势?< / p>
背景:
.lua
文件构成我的网络应用程序(来自模型/视图/控制器)为了简化部署,我想将运行我的Web应用程序的所有.lua脚本编译成单个可执行文件。
这可能吗?如何?
看来Lua官方附带了一个名为SRLua
答案 0 :(得分:78)
将所有Lua源代码文件转换为目标文件并将它们放在静态库中:
for f in *.lua; do
luajit -b $f `basename $f .lua`.o
done
ar rcus libmyluafiles.a *.o
然后使用libmyluafiles.a
将-Wl,--whole-archive -lmyluafiles -Wl,--no-whole-archive -Wl,-E
库链接到您的主程序。
此行强制链接器包含存档中的所有目标文件并导出所有符号。
例如,名为foo.lua的文件现在可以从您的应用程序中加载local foo = require("foo")
。
有关-b
选项的详情,请访问Running LuaJIT。
答案 1 :(得分:2)
对于您当前正在部署为相关.lua
文件嵌套的Web应用程序,最简单的答案是将它们压缩为单个文件。对于luac
的简单案例,通常可以这样做。但是,对于混合模块的复杂应用程序,您需要更智能的东西。
我个人使用Mathew Wild的实用程序squish
来做类似的事情。
运行挤压后,您将拥有一个.lua
个文件,其中包含所有捆绑的Lua源代码。您可以部署该单个文件。
如果您还需要捆绑任何二进制模块或Lua或LuaJIT解释器,那么您可以轻松地使用SRLua将其与Lua解释器捆绑在一起,或者使用类似的技术将其与LuaJIT捆绑在一起。