web-dev-qa-db-fra.com

Créer des exécutables Lua autonomes

Existe-t-il un moyen simple de créer des fichiers .exe autonomes à partir de scripts Lua? Fondamentalement, cela impliquerait de relier l'interprète Lua et les scripts.

Je crois que c'est possible (PLT Scheme permet la création d'exécutables autonomes de la même manière), mais comment, exactement

36
h3rald

Départ pour srlua . Il fait ce dont vous avez besoin. 

C'est de l'un des auteurs Lua. Sur cette adresse, il y a aussi des binaires Windows pré-compilés, donc ce serait encore plus facile pour vous, je pense.

28
Edwin Jarvis

Pour rendre exécutable à partir d'un script, utilisez l'utilitaire bin2c de la manière suivante:

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

Ensuite, créez le fichier main.c dans l’éditeur de texte et compilez-le/liez-le à votre compilateur préféré. C'est tout. (Remarque: l'exécutable prend également en charge les arguments de ligne de commande)

Exemple avec 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

Utilisez/SUBSYSTEM: WINDOWS pour l’exécutable graphique . Tout cela n’est pas facile pour la première fois, vous pouvez créer un fichier de commandes pour automatiser le processus une fois que vous l’avez essayé avec succès.

principal 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

Outre les suggestions ci-dessus, vous pouvez consulter L-Bia .

Il peut créer des exécutables autonomes comprenant les scripts Lua et les bibliothèques dynamiques nécessaires.

7
Ignacio

Puisque vous dites «.exe», je présume que vous recherchez une solution Windows. Une idée consiste simplement à ajouter des scripts à un exécutable interpréteur pré-construit. Cela peut être qualifié ou non de "facile" dans votre livre.

L'interpréteur doit pouvoir se lire lui-même, analyser son en-tête pour déterminer où se terminent les données .exe habituelles (c'est-à-dire où commence le script), puis transmettre le reste du fichier à Lua.

D’autres solutions n’imposent pas à l’interprète de travailler aussi dur, mais requièrent une liaison plus complexe. Tandis que, avec cette méthode, rédiger un script peut être aussi simple que cela.

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

Depuis 2018, luastatic est un outil activement mis à jour qui le permet. srlua de la réponse acceptée et les autres outils de cette page ne semblent pas entretenus.

0
polm23

Comme ce sujet a un intérêt quelque peu «perpétuel» et que les réponses possibles sont «fluides» en ce sens que de nouvelles solutions peuvent émerger (alors que les anciennes peuvent devenir obsolètes), voici encore une autre possibilité (pour Windows) et des dépendances de sources Lua pures.

Lien: Utilitaire de console Windows permettant de convertir en une seule étape une source Lua avec ses dépendances Lua en un fichier C prêt à être compilé.

Remarque: sauf là où il y a des différences dans le bytecode pour d'autres plates-formes, le code C résultant devrait pouvoir être compilé sur toute plate-forme capable de compiler une source Lua stock et de créer des fichiers binaires natifs autonomes de vos applications Lua.

0
tonypdmtr