创建独立的Lua可执行文件

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

我相信这是可能的(PLT Scheme 允许以同样的方式创建独立的可执行文件),但具体来说应该怎么做呢?

原文链接 https://stackoverflow.com/questions/194520

点赞
stackoverflow用户88888888
stackoverflow用户88888888

由于您说的是“.exe”,我将假设您正在寻找Windows解决方案。一个想法是将脚本附加到预先构建的解释器可执行文件上。它可能符合您的“易于”的标准,也可能不符合。

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

其他解决方案不需要解释器工作得那么努力,但要求更复杂的链接,而采用这种方法,将脚本转化为exe可以像这样简单:

copy interpreter.exe+script.lua script.exe
2008-10-11 20:41:01
stackoverflow用户18623
stackoverflow用户18623

请查看 srlua,它能满足你的需求。

这是 Lua 作者之一创建的。在这个网址上还有预编译的 Windows 二进制文件,所以我想那会更容易些。

2008-10-11 21:08:19
stackoverflow用户44740
stackoverflow用户44740

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

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

2008-12-09 21:00:47
stackoverflow用户88888888
stackoverflow用户88888888

为了从脚本中创建可执行文件,可以使用 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。 对于第一次来说,这并不容易,您可以创建批处理文件以自动化此过程一旦您成功尝试它。

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;
}
2009-07-19 14:41:58
stackoverflow用户3735873
stackoverflow用户3735873

由于这个话题有些“持久”的兴趣,而可能的答案也是“流动的”,意味着新的解决方案可能会出现(而旧的解决方案可能已经过时),这里提供了另一个可能性(适用于 Windows)和纯 Lua 源代码依赖。

链接:Windows 控制台实用程序,可以一步将带有其 Lua 源代码依赖项的 Lua 源代码转换为准备编译的 C 文件。

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

2017-04-19 13:05:50
stackoverflow用户355715
stackoverflow用户355715

截至2018年,luastatic是一款正在积极维护的工具,可以将Lua代码静态编译成一个独立的可执行文件。而本问题中被接受的回答中提到的srlua和这个页面上的其他工具似乎未被维护。

2018-09-26 14:27:28
stackoverflow用户18058241
stackoverflow用户18058241

下面是一个简单的方法:

  1. http://luabinaries.sourceforge.net/下载lua的二进制文件。
  2. 解压该文件并在同一个文件夹中创建一个app.lua文件。
  3. 通过WIN键加R打开运行,输入iexpress。
  4. 在iexpress中选择创建新的自解压指令文件并按下一步。
  5. 选择提取文件并运行安装命令,然后按下一步。
  6. 给你的应用程序取一个名字。选择不提示并且不显示许可证,然后在让你选择文件的时候选择你的app.lua和那些lua二进制文件所在的文件夹。
  7. 全选并按下一步,在安装程序中输入"lua54.exe app.lua"(不带引号)。在显示窗口中选择默认,完成信息中选择无消息。在包名称和选项中,点击浏览并输入你的exe名称,然后选择隐藏提取进度并使用长文件名存储文件。
  8. 选择不重新启动,然后你可以保存sed文件或不保存。
  9. 选择下一步和下一步,它应该生成一个exe,你可以双击运行这个应用程序。
  10. 缺点:人们可以通过将文件重命名为.zip来轻松找到你的源代码。
2022-06-28 15:51:49