it-swarm.com.de

Erstellen eigenständiger ausführbarer Lua-Dateien

Gibt es eine einfache Möglichkeit, eigenständige EXE-Dateien aus Lua-Skripts zu erstellen? Im Wesentlichen würde dies die Verknüpfung des Lua-Interpreters und der Skripte beinhalten.

Ich glaube, dass dies möglich ist (PLT-Schema ermöglicht die Erstellung von eigenständigen ausführbaren Dateien auf dieselbe Weise), aber wie genau?

36
h3rald

Check out für srlua . Es macht was Sie brauchen. 

Es ist von einem der Lua-Autoren. Auf dieser Adresse gibt es auch vorkompilierte Windows-Binärdateien, so dass dies meiner Meinung nach noch einfacher wäre.

28
Edwin Jarvis

Um aus einem Skript eine ausführbare Datei zu erstellen, verwenden Sie das Dienstprogramm bin2c folgendermaßen:

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

Erstellen Sie dann im Texteditor die Datei main.c und kompilieren/verknüpfen Sie sie mit Ihrem bevorzugten Compiler. Das ist es. (Hinweis - Die ausführbare Datei unterstützt auch Befehlszeilenargumente.)

Beispiel mit 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

Verwenden Sie/SUBSYSTEM: WINDOWS für die GUI-Programmdatei. Dies ist nicht nur für das erste Mal einfach. Sie können eine Batchdatei erstellen, um den Prozess zu automatisieren, sobald Sie es erfolgreich getestet haben.

haupt 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;
}
8
mad nick

Neben den oben genannten Vorschlägen können Sie auch L-Bia anschauen.

Es kann eigenständige ausführbare Dateien einschließlich Lua-Skripts und die erforderlichen dynamischen Bibliotheken erstellen.

7
Ignacio

Da Sie ".exe" sagen, gehe ich davon aus, dass Sie nach einer Windows-Lösung suchen. Eine Idee ist, Skripts einfach an eine vorgefertigte ausführbare Interpreterdatei anzuhängen. Es kann oder kann nicht als "einfach" in Ihrem Buch gelten.

Der Interpreter muss in der Lage sein, sich selbst zu lesen, seinen Header zu parsen, um zu bestimmen, wo die regulären .exe-Daten enden (dh wo das Skript beginnt), und dann den Rest der Datei an Lua zu übergeben.

Bei anderen Lösungen muss der Interpreter nicht so hart arbeiten, aber es ist ein umfangreicheres Linking erforderlich. Mit dieser Methode kann das Ausführen eines Skripts jedoch so einfach sein wie

copy interpreter.exe+script.lua script.exe
3
Mike F

Ab 2018 ist luastatic ein aktiv gewartetes Werkzeug, das dies tut. srlua von der akzeptierten Antwort und den anderen Tools auf dieser Seite scheinen nicht gepflegt zu sein.

0
polm23

Da dieses Thema ein gewisses "ewiges" Interesse hat und die möglichen Antworten in dem Sinne "fließend" sind, dass neue Lösungen auftauchen können (während ältere möglicherweise veraltet sind), gibt es noch eine andere Möglichkeit (für Windows) und reine Lua-Quellenabhängigkeiten.

Link: Windows-Konsolenprogramm zum Konvertieren einer Lua-Quelle mit ihren Lua-Quellenabhängigkeiten in einem einzigen Schritt in eine zum Kompilieren bereitgestellte C-Datei.

Hinweis: Außer wenn der Bytecode für andere Plattformen unterschiedlich ist, sollte der resultierende C-Code auf jeder Plattform kompiliert werden können, die Lua-Quellcode kompilieren und eigenständige native Binärdateien Ihrer Lua-Anwendungen erstellen kann.

0
tonypdmtr