39

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

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

4

6 回答 6

30

检查srlua。它可以满足您的需要。

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

于 2008-10-11T21:08:19.810 回答
10

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

对 GUI 可执行文件使用 /SUBSYSTEM:WINDOWS。第一次这一切都不容易,一旦成功尝试,您可以创建批处理文件以自动化该过程。

主.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;
}
于 2009-07-19T14:41:58.790 回答
7

除了以上建议,您还可以看看L-Bia

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

于 2008-12-09T21:00:47.100 回答
5

截至 2018 年,luastatic是一个积极维护的工具,可以做到这一点。已接受答案中的 srlua 和此页面上的其他工具似乎未维护。

于 2018-09-26T14:27:28.263 回答
4

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

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

其他解决方案不需要解释器努力工作,但需要更多涉及的链接,而使用这种方法,执行脚本可以很简单

copy interpreter.exe+script.lua script.exe
于 2008-10-11T20:41:01.083 回答
0

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

链接:Windows 控制台实用程序,只需一步即可将 Lua 源及其 Lua 源依赖项转换为准备编译的 C 文件。

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

于 2017-04-19T13:05:50.247 回答