2008-10-11 33 views
33

Czy istnieje prosty sposób tworzenia samodzielnych plików .exe ze skryptów Lua? Zasadniczo wiązałoby się to z łączeniem interpretera Lua i skryptów.Tworzenie samodzielnych plików wykonywalnych Lua

Uważam, że jest to możliwe (PLT Scheme pozwala na tworzenie samodzielnych plików wykonywalnych w ten sam sposób), ale jak, dokładnie?

Odpowiedz

27

sprawdzić na srlua. Robi to, czego potrzebujesz.

Pochodzi od jednego z autorów Lua. Pod tym adresem znajdują się również wstępnie skompilowane pliki binarne systemu Windows, więc wydaje mi się, że jest to dla ciebie jeszcze łatwiejsze.

+0

Niestety, srlua nie działała dla mnie. Rozwiązanie z luac/bin2c poniżej działało – Zane

+1

srlua dystrybuuje pliki binarne w repozytorium github-https: // github.com/LuaDist/srlua Te działały całkiem dobrze dla mnie- 'glue.exe srlua.exe my.lua my.exe' – noahp

3

Ponieważ mówisz ".exe", zakładam, że szukasz rozwiązania Windows. Jednym z pomysłów jest dołączenie skryptów do wstępnie skompilowanego pliku wykonywalnego tłumacza. Może to, ale nie musi, zostać zakwalifikowane jako "łatwe" w twojej książce.

Tłumacz musi być w stanie odczytać samą siebie, przeanalizować nagłówek, aby ustalić, gdzie kończą się regularne dane exe (tj. Gdzie zaczyna się skrypt), a następnie przekazać pozostałą część pliku Lua.

Inne rozwiązania nie wymagają interpreter pracować tak ciężko, ale wymagają większego zaangażowania łączenia, natomiast z tej metody, exeifying skrypt może być tak proste, jak

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

To właśnie robi srlua. – lhf

7

Oprócz powyższych sugestii, można spojrzeć na L-Bia.

Może tworzyć samodzielne pliki wykonywalne, w tym skrypty lua i potrzebne biblioteki dynamiczne.

+0

8^(I nie działało L-Bia. – Zane

8

Aby korzystanie z wykonywalny skrypt użytkowy bin2c taki sposób:

luac script.lua -o script.luac 
bin2c script.luac > code.c 

Następnie należy utworzyć w edytorze tekstu plik main.c i kompilacji/połączyć go ze swoim ulubionym kompilator. to jest to! (Uwaga - wykonywalny obsługuje linię polecenia args)

przykład z 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 

Używaj/Subsystem: okna dla GUI wykonywalnego. Wszystko, co nie jest łatwe, po raz pierwszy, można utworzyć plik wsadowy, aby zautomatyzować proces po pomyślnym wypróbowaniu.

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; 
} 
+2

Zauważ, że bin2c został upuszczony z Lua 5.1, więc potrzebujesz innego sposobu, aby spakować kod bajtowy i umieścić go na stosie Lua. Zobacz http://lua-users.org/wiki/BinToCee dla reimplementacji w Lua. –

0

Ponieważ ten temat ma nieco „wiecznego” zainteresowanie i możliwe odpowiedzi są „płynne” w tym sensie, że nowe rozwiązania mogą wyłonić się (podczas gdy starsi mogą stać się przestarzałe), oto jeszcze jedna możliwość (dla Windows) i czyste zależności źródłowe Lua.

Link: Windows console utility to convert in a single step a Lua source with its Lua source dependencies into a C file ready for compilation.

Uwaga: Z wyjątkiem, gdzie istnieją różnice w kodu bajtowego dla innych platform, otrzymany kod C powinny móc skompilować na każdej platformie, które można skompilować free Lua źródła i stworzyć samodzielny natywne pliki binarne aplikacji Lua.

Powiązane problemy