Création d’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 pense que c’est possible (PLT Scheme permet la création d’exécutables autonomes de la même manière), mais comment, exactement?

Découvrez srlua . Il fait ce dont vous avez besoin.

C’est l’un des auteurs de Lua. Sur cette adresse, il existe également des binarys Windows pré-compilés, ce qui serait encore plus facile pour vous.

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 dans le fichier éditeur de texte main.c et comstackz / liez-le avec votre compilateur favori. C’est tout. (Remarque – 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 de l’interface graphique. Tout ce qui n’est pas facile pour la première fois, vous pouvez créer un fichier batch pour automatiser le processus une fois que vous l’avez essayé avec succès.

principal c:

 #include  #include  #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; } 

Outre les suggestions ci-dessus, vous pouvez jeter un oeil à L-Bia .

Il peut créer des exécutables autonomes, y compris des scripts lua et les bibliothèques dynamics nécessaires.

Puisque vous dites “.exe”, je suppose que vous recherchez une solution Windows. Une idée consiste simplement à append des scripts à un exécutable d’interpréteur prédéfini. Il peut ou peut ne pas être considéré comme «facile» dans votre livre.

L’interpréteur doit pouvoir se lire, parsingr son en-tête pour déterminer où se terminent les données .exe régulières (c’est-à-dire où commence le script), puis transférer le rest du fichier à Lua.

D’autres solutions n’exigent pas que l’interpréteur fonctionne aussi durement, mais nécessitent une liaison plus complexe, alors qu’avec cette méthode, l’exeification d’un script peut être aussi simple que

 copy interpreter.exe+script.lua script.exe 

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 apparaître (alors que les anciennes peuvent devenir obsolètes), voici une autre possibilité (pour Windows) et des dépendances de sources Lua pures.

Lien: utilitaire de la console Windows pour convertir en une seule étape une source Lua avec ses dépendances de source Lua dans un fichier C prêt pour la compilation.

Remarque: Sauf en cas de différences dans le bytecode pour les autres plates-formes, le code C résultant doit pouvoir être compilé sur toute plate-forme capable de comstackr des sources Lua et créer des binarys natifs autonomes de vos applications Lua.