我如何将我的Lua脚本编译成单个可执行文件,同时获得LuaJIT的超快性能优势?
背景:
.lua
文件组成我的web应用程序(从模型/视图/控制器) 为了简单起见,我想将所有运行我的web应用程序的.lua脚本编译成一个可执行文件。
这是可能的和如何?
Lua官员似乎有一个名为SRLua的图书馆
将所有的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
。
该行强制链接器包含归档中的所有对象文件并导出所有符号。
例如,现在可以在应用程序中使用local foo = require("foo")
加载名为foo.lua的文件。
有关-b
选项的详细信息可以在运行LuaJIT中找到。
对于当前正在作为相关.lua
文件嵌套部署的Web应用程序,最简单的答案是将它们压缩为单个文件。 这通常可以用luac
做简单的例子。 但是,对于复杂的应用程序,您需要更聪明的模块。
我个人使用Mathew Wild的实用squish
来做类似的事情。
运行.lua
之后,您将拥有一个包含所有Lua源代码的.lua
文件。 您可以只部署该单个文件。
如果您还需要捆绑任何二进制模块,或Lua或LuaJIT解释器,那么您可以轻松使用SRLua将其与Lua解释器或类似的技术捆绑在一起。