创建独立的Lua可执行文件

时间:2008-10-11 19:50:15

标签: windows lua

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

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

6 个答案:

答案 0 :(得分:28)

查看srlua。它做你需要的。

来自Lua的一位作者。在这个地址上还有预编译的Windows二进制文件,所以我认为这对你来说更容易。

答案 1 :(得分:9)

要从脚本生成可执行文件,请使用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;
}

答案 2 :(得分:7)

除上述建议外,您还可以查看L-Bia

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

答案 3 :(得分:3)

因为你说'.exe'我会假设你正在寻找一个Windows解决方案。一个想法是只将脚本附加到预构建的解释器可执行文件。它可能会或可能不会在您的书中被称为“简单”。

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

其他解决方案不需要解释器工作得那么难,但需要更多涉及链接,而使用此方法,执行脚本可以像

一样简单
copy interpreter.exe+script.lua script.exe

答案 4 :(得分:0)

由于这个主题有点“永久”。兴趣和可能的答案是“流动的”。从某种意义上说,新的解决方案可能会出现(而旧的解决方案可能会过时),这是另一种可能性(针对Windows)和纯Lua源依赖关系。

链接:Windows console utility to convert in a single step a Lua source with its Lua source dependencies into a C file ready for compilation.

注意:除非其他平台的字节码存在差异,否则生成的C代码应该能够在任何可以编译Lua源代码的平台上编译,并创建Lua应用程序的独立本机二进制文件

答案 5 :(得分:0)

截至2018年,luastatic是一个积极维护的工具,可实现此目的。似乎无法维护接受的答案中的srlua和此页面上的其他工具。