Question

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

j'utilise clisp et clisp -c produit deux fichiers :

  • .fas
  • .lib

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

Était-ce utile?

La solution

En fait, j'essayais de le faire aujourd'hui, et j'ai trouvé que taper ceci dans le CLisp REPL fonctionnait :

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

où main est le nom de la fonction que vous souhaitez appeler au lancement du programme, :QUIET t supprime la bannière de démarrage, et :EXECUTABLE t crée 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 de recevoir une invite Lisp interactive lorsque le programme est terminé.

MODIFIER:En lisant la documentation, vous souhaiterez peut-être également ajouter :NORC t(lire lien).Cela supprime le chargement du fichier RC (par exemple, ~/.clisprc.lisp).

Autres conseils

C'est un FAQ Lisp (légèrement adapté):

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

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

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

  • Avec LispWorks, consultez le Guide de l'utilisateur de la livraison Section de la documentation.

  • Avec Allegro Common Lisp, voir le Livraison Section du manuel.

  • etc...

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

Phase de programmation:Le développement du LISP commun a une sensation plus incrémentielle que celle courante dans les langues axées sur les lots, où un cycle d'édition-compile-link est courant.Un développeur CL exécutera des tests simples et des interactions transitoires avec l'environnement au niveau (ou à la lecture-Eval-Print-boucle, également connu sous le nom de auditeur).Le code source est enregistré dans les fichiers et les dépendances de build / charge entre les fichiers source sont enregistrées dans une installation de description du système tel que l'ASDF (qui joue un rôle similaire à faire Dans les systèmes d'édition-compile-link).L'installation de description du système fournit des commandes pour la création d'un système (et ne recompilant que les fichiers dont les dépendances ont changé depuis la dernière version) et pour le chargement d'un système en mémoire.

La plupart des implémentations LISP courantes fournissent également un mécanisme "Save-World" qui permet de sauvegarder un instantané de l'image LISP actuelle, sous une forme qui peut être redémarrée plus tard.Un environnement LISP commun se compose généralement d'un runtime exécutable relativement petit et d'un fichier image plus grand qui contient l'état du monde LISP.Une utilisation courante de cette installation consiste à vider une image personnalisée contenant tous les outils de construction et les bibliothèques utilisés sur un projet donné, afin de réduire le temps de démarrage.Par exemple, cette installation est disponible sous le nom EXT: Save-Lisp dans CMUCL, SB-TEXT: Save-Lisp-and-Die dans SBCL, ext: SaveInitMem dans CLISP, et CCL: SAVE-PROPLICATION Dans OpenMCL.La plupart de ces implémentations peuvent prétendre l'exécution de l'image, ce qui le rend exécutable.

Livraison des applications:Plutôt que de générer un seul fichier exécutable pour une application, les développeurs LISP enregistrent généralement une image contenant leur application et la livrer aux clients avec l'exécution et éventuellement un wrapper de script-shell qui invoque l'exécution avec l'image de l'application.Sur les plates-formes Windows, cela peut être caché à l'utilisateur en utilisant un outil de type Click-O-Matic InstallerShield.

Jetez un œil à la page d’accueil officielle du clip.Il existe une FAQ qui répond à cette question.

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

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

Pour une manière portable de le faire, je recommande Roswell.

Pour toute implémentation prise en charge, vous pouvez créer des scripts Lisp pour exécuter le programme qui peut être exécuté de manière portable en ros qui peut être utilisé dans une ligne de hachage de la même manière qu'un programme Python ou Ruby.

Pour SBCL et CCL, Roswell peut également créer des exécutables binaires avec ros dump executable.

Je sais que c'est une vieille question mais le code Lisp que je regarde a 25 ans :-)

Je n'ai pas pu faire fonctionner la compilation avec clip sous Windows 10.Cependant, cela a fonctionné pour moi avec gcl.

Si mon fichier Lisp est jugs2.lisp,

gcl -compile jugs2.lisp

Cela produit le fichier jugs2.o si le fichier jugs2.lisp ne contient aucune erreur.

Exécutez gcl sans paramètres pour lancer l'interpréteur Lisp :

gcl

Chargez le fichier .o :

(load "jugs2.o")

Pour créer un EXE :

(si:save-system "jugs2")

Lorsque l'EXE est exécuté, il a besoin de la DLL oncrpc.dll;c'est dans le <gcl install folder>\lib\gcl-2.6.1\unixport dossier créé par gcl.bat.

Lors de l'exécution, il montre un environnement LISP, appelez (Main) pour exécuter la fonction principale (Main).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top