创build独立的Lua可执行文件

有没有一种简单的方法来创build从Lua脚本独立的.exe文件? 基本上这将涉及链接Lua解释器和脚本。

我相信这是可能的(PLT Scheme允许以同样的方式创build独立的可执行文件),但是究竟是如何呢?

退房srlua 。 它做你所需要的。

这是来自Lua的作者之一。 在这个地址也有预编译的Windows二进制文件,所以这对我来说会更容易。

除了上面的建议,你可以看看L-Bia 。

它可以制作独立的可执行文件,包括lua脚本和所需的动态库。

为了使脚本使用bin2c实用程序执行这样的可执行文件:

 luac script.lua -o script.luac bin2c script.luac > code.c 

然后在文本编辑器文件main.c中创建,并用你最喜欢的编译器进行编译/链接。 而已。 (注 – 可执行文件也支持命令行参数)

MSVC示例:

 cl /I "./" /I "$(LUA_DIR)\include" /D "_CRT_SECURE_NO_DEPRECATE" /D "_MBCS" /GF /FD /EHsc /MD /Gy /TC /c main.c ld /SUBSYSTEM:CONSOLE /RELEASE /ENTRY:"mainCRTStartup" /MACHINE:X86 /MANIFEST $(LUA_DIR)\lib\lua5.1.lib main.obj /out:script.exe mt -manifest $script.manifest -outputresource:script.exe;1 

使用/ SUBSYSTEM:WINDOWS用于GUI可执行文件。 所有那些只是第一次不容易,你可以创建批处理文件来自动化过程,一旦你成功尝试。

main.c中:

 #include <stdlib.h> #include <stdio.h> #include "lua.h" #include "lauxlib.h" #include "lualib.h" int main(int argc, char *argv[]) { int i; lua_State *L = luaL_newstate(); luaL_openlibs(L); lua_newtable(L); for (i = 0; i < argc; i++) { lua_pushnumber(L, i); lua_pushstring(L, argv[i]); lua_rawset(L, -3); } lua_setglobal(L, "arg"); #include "code.c" lua_close(L); return 0; } 

既然你说'.exe'我会假设你正在寻找一个Windows解决方案。 一个想法是将脚本附加到预编译器可执行文件。 在您的书中,它可能会或可能不符合“简单”的要求。

解释器需要能够自己读取,解析它的头部以确定常规.exe数据的结束位置(即脚本的开始位置),然后将文件的其余部分交给Lua。

其他的解决方案并不需要解释器的工作很难,但需要更多的参与链接,而用这种方法,执行一个脚本可以像

 copy interpreter.exe+script.lua script.exe 

由于这个话题有一些“永久的”兴趣,可能的答案是“流动的”,因为新的解决方案可能会出现(而旧的解决方案可能会过时),这又是另一种可能性(对于Windows)和纯粹的Lua源依赖。

链接: Windows控制台实用程序将一个Lua源代码与Lua源代码依赖项转换为一个可以编译的C文件。

注意:除了其他平台的字节码存在差异之外,所产生的C代码应该能够在任何可以编译库存Lua源代码的平台上编译,并且可以创建Lua应用程序的独立本地二进制文件。