Question

Avec un programme simple tel que le suivant, comment feriez-vous:

  1. compilez-le en tant que fichier image séparé chargé par l'implémentation, et quels arguments de ligne de commande utiliseriez-vous pour le charger?

  2. Compilez-le en tant que fichier binaire autonome pouvant être chargé et exécuté tel quel.

    Remarque: j'ai essayé d'ajouter ": prepend-kernel t " lors de la sauvegarde de l'application uniquement pour avoir l'erreur suivante.

    Error: value NIL is not of the
    expected type REAL. While executing: 
    CCL::<-2, in process Initial(0).
    
  3. Comment voulez-vous supprimer le message de bienvenue?

    Le programme

    (defun main ()
      (format t "This is the program.")0)
    

Modifier

Je déteste répondre à une partie de ma propre question, mais je l’ai tout de même trouvé.

Une fois la fonction chargée, tapez ce qui suit pour la compiler:

(ccl:save-application "app")

Ceci crée un fichier image. Pour le charger en le passant au type d'implémentation (note: le binaire 'ccl' est dans mon chemin système);

ccl -I app

Pour exécuter une fonction de niveau supérieur, transmettez-la en tant que paramètre

ccl -I app --eval (main)
Était-ce utile?

La solution

Voir la documentation Clozure Common Lisp sous Enregistrement d'applications

Compilation et chargement de fichiers Lisp

Vous pouvez compiler un fichier nommé /foo/bar.lisp en appelant

 (compile-file "/foo/bar.lisp")

Ceci créera un fichier fasl (FASt Load), qui contient du code natif.

Vous pouvez charger le fichier compilé, le fichier fasl, avec la fonction LOAD . LOAD et COMPILE-FILE sont des fonctions standard de Common Lisp.

Création d'applications

Quelques définitions:

  • Noyau CCL : partie de CCL qui fournit des services d'exécution de bas niveau tels que la gestion de la mémoire.
  • Image : une sauvegarde sauvegardée du tas Lisp
  • Application : noyau CCL + image. Cela peut être dans un seul fichier.

Vous pouvez enregistrer une application en appelant une fonction spécifique à CCL:

(save-application "/foo/bar-image" :toplevel-function #'main)

Ceci enregistrera une image que vous pourrez exécuter à l'aide du noyau CCL à partir d'un interpréteur de commande:

ccl -I /foo/bar-image

Pour enregistrer un fichier exécutable incluant le noyau, utilisez-le à partir de Lisp:

(save-application "/foo/bar-app"
                  :toplevel-function #'main
                  :prepend-kernel t)

Vous pouvez appeler cet exécutable comme d'habitude avec / foo / bar-app à partir d'un interpréteur de commande.

Dans Clozure Common Lisp, vous pouvez vérifier

*command-line-argument-list*

pour la liste des arguments de ligne de commande fournis.

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