2008-10-11 91 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應用程序的本地二進制文件。

相關問題