59 votes

Exécutable Lisp

Je viens de commencer à apprendre Lisp et je n'arrive pas à comprendre comment compiler et lier un code Lisp à un exécutable.

J'utilise clisp y clisp -c produit deux fichiers :

  • .fas
  • .lib

Que dois-je faire ensuite pour obtenir un exécutable ?

0 votes

Vous pourriez utiliser compile-file à la place.

48voto

thekidder Points 2237

J'ai essayé de faire cela aujourd'hui, et j'ai trouvé que taper ceci dans le REPL CLisp fonctionnait :

(EXT:SAVEINITMEM "executable.exe"
                 :QUIET t
                 :INIT-FUNCTION 'main
                 :EXECUTABLE t
                 :NORC t)

où main est le nom de la fonction que vous voulez appeler au lancement du programme, :QUIET t supprime la bannière de démarrage, et :EXECUTABLE t rend un exécutable natif.

Il peut également être utile d'appeler

(EXT:EXIT)

à la fin de votre fonction principale afin d'empêcher l'utilisateur d'obtenir une invite interactive lisp lorsque le programme est terminé.

EDIT : En lisant la documentation, vous pouvez aussi ajouter :NORC t (lire lien ). Cela supprime le chargement du fichier RC (par exemple, ~/.clisprc.lisp ).

0 votes

Sur ccl sur mac os x 10.9 j'ai un problème pour créer des exécutables. (save-application "/full/path/to/saved-app" :prepend-kernel t) en double cliquant sur le fichier exécutable produit, le terminal affiche de très longues erreurs commençant par une erreur du type : problems loadiing bundle:can't determine class name et se terminant par les options du débogueur du noyau. Sur le ccl sous Windows, je définis simplement une fonction et je fais la même chose que ci-dessus pour sauvegarder l'exécutable, plus tard, je peux double-cliquer sur le fichier de sortie, il s'exécute et se souvient de la fonction que j'ai définie, le ccl sur Mac ne s'en souvient pas non plus lorsque je sauvegarde l'image et la charge manuellement dans le noyau.

36voto

Luís Oliveira Points 2139

Il s'agit d'un FAQ Lisp (légèrement adapté) :

*** Comment faire un exécutable à partir de mon programme ?

Cela dépend de votre implémentation ; vous devrez consulter la documentation de votre documentation de votre fournisseur.

  • Avec ECL et GCL, le processus de compilation standard est le suivant produit un exécutable natif.

  • Avec LispWorks, voir le Guide de l'utilisateur de Delivery de la documentation.

  • Avec Allegro Common Lisp, voir la page Livraison de la section manuel.

  • etc...

Cependant, la manière classique d'interagir avec les programmes Common Lisp n'implique pas d'exécutables autonomes. Considérons cela pendant deux phases du processus de développement : la programmation et la livraison.

Phase de programmation : Le développement de Common Lisp est plus incrémental que celui des langages orientés vers le traitement par lots, où le cycle cycle édition-compilation-liaison est courant. Un développeur CL exécutera des tests simples tests simples et des interactions transitoires avec l'environnement au niveau du REPL (ou Read-Eval-Print-Loop, également connu sous le nom de auditeur ). Le code source est sauvegardé dans des fichiers, et le processus de construction/chargement entre les fichiers sources sont enregistrées dans un outil de description du système tel que l'ASDF (qui joue un rôle similaire à celui de l'ASDF). faire dans systèmes d'édition-compilation-liaison). La fonction de description du système fournit commandes pour construire un système (et seulement recompiler les fichiers dont les dont les dépendances ont changé depuis la dernière compilation), et pour charger un système en mémoire.

La plupart des implémentations de Common Lisp fournissent également un mécanisme "save-world" qui permet de sauvegarder un instantané de l'image lisp actuelle. qui permet de sauvegarder un instantané de l'image lisp courante, sous une forme qui peut être redémarrée plus tard. Un environnement Common Lisp se compose généralement d'un exécutable relativement petit et d'un fichier image plus grand qui contient l'état de l'environnement Common Lisp. fichier image plus grand qui contient l'état du monde lisp. Une utilisation courante utilisation courante de cette installation est de déverser une image personnalisée contenant tous les outils de construction et les bibliothèques utilisés sur le serveur. contenant tous les outils de construction et les bibliothèques utilisés sur un projet donné, afin de afin de réduire le temps de démarrage. Par exemple, cette fonction est disponible sous sous le nom EXT:SAVE-LISP dans CMUCL, SB-EXT:SAVE-LISP-AND-DIE dans SBCL SBCL, EXT:SAVEINITMEM en CLISP, et CCL:SAVE-APPLICATION en OpenMCL. OpenMCL. La plupart de ces implémentations peuvent ajouter le runtime à l'image, la rendant ainsi exécutable. image, la rendant ainsi exécutable.

Livraison des applications : plutôt que de générer un seul exécutable pour une application, les développeurs Lisp sauvegardent généralement une image contenant leur application, et la livrent aux clients en même temps que le le moteur d'exécution et éventuellement un shell-script qui invoque le moteur d'exécution. runtime avec l'image de l'application. Sur les plates-formes Windows, cela peut être caché à l'utilisateur en utilisant un outil de type InstallShield à clics automatiques.

14voto

Patrik Points 5315

Jetez un coup d'œil à la page d'accueil officielle de Clisp. Il y a une FAQ qui répond à cette question.

http://clisp.cons.org/impnotes/faq.html#faq-exec

14voto

Luís Oliveira Points 2139

CLiki a également une bonne réponse : Création d'exécutables

-2voto

Pablo Points 44881

Je n'ai jamais trouvé un bon moyen de le faire en Common Lisp et j'ai écrit à ce sujet sur :

http://pupeno.com/blog/the-problem-with-lisp

et quelques solutions possibles :

http://pupeno.com/blog/solving-lisps-problem-a-simplistic-solution http://pupeno.com/blog/another-simplistic-solution-with-scons

Maintenant, je travaille avec Clojure où la manière habituelle d'écrire des programmes Java s'applique.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X