How can I compile my Lua scripts into a single executable file, while also gaining the super fast performance benefits of LuaJIT?
Background:
- My Lua scripts are for a web application I created (e.g. to host http://example.com)
- My current technology stack is NGINX (web server), Lua/LuaJIT (language to retrieve dynamic content)
- I have around 50+
.lua
files that make up my web application (from Models/Views/Controllers) - FreeBSD 9 operating system
For simplicity sake in deployment, I'd like to compile down all of my .lua scripts that run my web application down to a single executable.
-
Is this possible and how?
It appears that Lua official comes with a library called SRLua
- What are the negatives to compiling down my .lua to a single executable (e.g. would performance be worse, etc)?
Best Answer
Translate all of the Lua source code files to object files and put them in a static library:
Then link the
libmyluafiles.a
library into your main program using-Wl,--whole-archive -lmyluafiles -Wl,--no-whole-archive -Wl,-E
.This line forces the linker to include all object files from the archive and to export all symbols.
For example, a file named foo.lua can now be loaded with
local foo = require("foo")
from within your application.Details about the
-b
option can be found on Running LuaJIT.