有没有一种简单的方法来从Lua脚本创建独立的.exe文件?基本上这将涉及链接Lua解释器和脚本。创建独立的Lua可执行文件
我相信这是可能的(PLT Scheme允许以同样的方式创建独立的可执行文件),但是究竟是如何?
有没有一种简单的方法来从Lua脚本创建独立的.exe文件?基本上这将涉及链接Lua解释器和脚本。创建独立的Lua可执行文件
我相信这是可能的(PLT Scheme允许以同样的方式创建独立的可执行文件),但是究竟是如何?
检查出srlua。它可以满足你的需求。
这是来自Lua的作者之一。在这个地址上还有预编译的Windows二进制文件,因此对于我来说这将更容易。
既然你说'.exe'我假设你正在寻找一个Windows解决方案。一个想法是将脚本附加到预编译器可执行文件。它可能会或可能不会在您的书中符合“简单”的条件。
解释器需要能够读取自身,解析其头文件以确定常规.exe数据结束位置(即脚本开始的位置),然后将文件的其余部分交给Lua。
其他解决方案不要求解释为努力工作,但确实需要更多地参与联,而用这种方法,exeifying脚本可以简单到
copy interpreter.exe+script.lua script.exe
这就是srlua所做的。 – lhf 2010-01-14 10:21:14
为了从脚本使用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;
}
这一话题已经有点“永久”的兴趣和可能的答案是在这个意义上,新的解决方案可能出现的(虽然旧的可能过时)“流体”,这里的还有另一种可能性(对于Windows)和纯粹的Lua源代码依赖项。
注:除非有字节码为他人的平台,生成的C代码应该能够编译可以编译股票的Lua源在任何平台上,并创建独立的差异你的Lua应用程序的本地二进制文件。
可悲的是,srlua没有为我工作。下面的解决方案与luac/bin2c工作 – Zane 2013-01-11 10:54:12
srlua在他们的github repo- https:// github分发二进制文件。com/LuaDist/srlua 这些工作对我来说很好 - `glue.exe srlua.exe my.lua my.exe` – noahp 2015-05-29 15:55:13