2008-10-11 50 views
33

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

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

回答

27

检查出srlua。它可以满足你的需求。

这是来自Lua的作者之一。在这个地址上还有预编译的Windows二进制文件,因此对于我来说这将更容易。

+0

可悲的是,srlua没有为我工作。下面的解决方案与luac/bin2c工作 – Zane 2013-01-11 10:54:12

+1

srlua在他们的github repo- https:// github分发二进制文件。com/LuaDist/srlua 这些工作对我来说很好 - `glue.exe srlua.exe my.lua my.exe` – noahp 2015-05-29 15:55:13

3

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

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

其他解决方案不要求解释为努力工作,但确实需要更多地参与联,而用这种方法,exeifying脚本可以简单到

copy interpreter.exe+script.lua script.exe 
+5

这就是srlua所做的。 – lhf 2010-01-14 10:21:14

7

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

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

+0

8 ^(既没有工作L-Bia。 – Zane 2013-01-11 10:51:29

8

为了从脚本使用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; 
} 
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应用程序的本地二进制文件。

相关问题