Kompiliere Lua-Code, speichere Bytecode, lade ihn und führe ihn aus
Ich versuche zu kompilieren ein lua-Skript, das Aufrufe von einigen exportierten Funktionen, speichern Sie die resultierenden bytecode in eine Datei und laden Sie dann diesen bytecode und führt ihn, aber ich habe nicht gefunden eine Beispiel auf, wie dies zu tun. Gibt es irgendein Beispiel, wie dies zu tun? Wie kann ich dies tun?
Edit: ich bin mit Lua + Luabind (C++)
InformationsquelleAutor der Frage WoLfulus | 2012-01-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist das alles sehr einfach.
Zunächst laden Sie die Lua-Skript - ohne Ausführung. Es spielt keine Rolle, wenn Sie an der Lua-Zustand mit den exportierten Funktionen; alles, was Sie tun, sich um die Erstellung der Skript-Datei.
Könnten Sie
luaL_loadfile
die verwendet C-standard-Bibliothek Funktionen zum Lesen einer Datei von der Festplatte und laden Sie es in dielua_State
. Alternativ können Sie auch laden Sie die Datei selbst in einen string und verwenden SieluaL_loadstring
laden Sie es in dielua_State
.Diese beiden Funktionen emittieren, Rückgabewerte und compiler-Fehler als pro die Dokumentation für
lua_load
.Wenn die Kompilierung erfolgreich war, die
lua_State
hat nun die kompilierten Lua-chunk als eine Lua-Funktion oben auf dem stack. Um das kompilierte binary, müssen Sie dielua_dump
Funktion. Es ist ziemlich kompliziert, als dass es nutzt eine callback-Schnittstelle übergeben Sie Ihre Daten. Sehen die Dokumentation für details.Nach diesem Prozess, haben Sie die kompilierten Lua-byte-code. Fegen Sie in eine Datei Ihrer Wahl. Nur denken Sie daran: schreiben Sie es als binärenicht mit der text-übersetzung.
Wenn es Zeit zum laden des byte-code ist alles, was Sie tun müssen, ist... genau das, was du vor hast. Na ja, fast. Lua-Heuristiken um zu erkennen, dass ein "string" ist es gegeben, ist eine Lua-source-string oder byte-code. Also ja, Sie können load-byte-code mit
luaL_loadfile
genau wie vorher.Der Unterschied ist, dass Sie nicht verwenden können
luaL_loadstring
mit byte-code. Die Funktion erwartet einen NULL-terminierten string, das ist schlecht. Byte-code mit eingebetteten NULL-Zeichen in es, die Schraube würde alles. Also, wenn Sie wollen, um die Datei-E /a sich selbst (denn Sie sind mit einem speziellen Dateisystem oder sowas), müssen Sielua_load
direkt. Die verwendet auch eine callback-Schnittstelle wielua_dump
. So Lesen Sie, wie es zu benutzen.InformationsquelleAutor der Antwort Nicol Bolas