2009-05-07 5 views
24

bénéficient d'un programme simple, comme suit, comment voulez-vous:compilation des applications avec Clozure Common Lisp

  1. compiler comme un séparé fichier image à charger par la mise en œuvre, et quels sont les arguments de ligne de commande évaluez-vous utiliser pour le charger?

  2. Compilez-le en tant que 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 pour que l'erreur de suivi soit levée.

    Error: value NIL is not of the 
    expected type REAL. While executing: 
    CCL::<-2, in process Initial(0). 
    
  3. Comment décririez-vous supress 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 question, mais je l'ai trouvé pas moins.

Une fois la fonction a été chargé de type ce qui suit pour compiler:

(ccl:save-application "app") 

Cela 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 haut niveau passe comme paramètre

ccl -I app --eval (main) 

Répondre

28

Voir la documentation Clozure Common Lisp sous Saving Applications

Compiler et charger des fichiers Lisp

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

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

Cela va créer un fichier fasl (EXPRES charge), qui contient le code natif.

Vous pouvez charger le fichier compilé, le fichier fasl, avec la fonction LOAD. LOAD et COMPILE-FILE sont des fonctions courantes des lèvres courantes.

Création d'applications

Quelques définitions:

  • CCL noyau: la partie du CCA qui fournit des services de runtimes bas niveau, comme la gestion de la mémoire.
  • image: une décharge sauvé du tas Lisp
  • Application: noyau CCL + image. Cela peut être dans un fichier.

Vous pouvez enregistrer une application en appelant une fonction spécifique du CCA:

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

Cela permettra d'économiser une image, que vous pouvez utiliser avec le noyau CCL à partir d'un shell de commande:

ccl -I /foo/bar-image 

Pour enregistrer un fichier exécutable qui inclut l'utilisation du noyau de ce 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 commandes.

Dans Clozure Common Lisp vous pouvez vérifier

*command-line-argument-list* 

pour la liste des arguments fournis en ligne de commande.

+0

Correction de l'erreur. En outre, l'application a été créée comme prévu, mais quand j'ai essayé de charger l'exe un message d'erreur m'a dit que le "Programme trop grand pour tenir dans la mémoire". Avez-vous déjà rencontré cela? Connaissez-vous un correctif? – BlueBadger

+0

voir ma modification, utilisez prepend-kernel pour ajouter le noyau au fichier –

+0

Je testais tout cela sur leur implémentation Windows et j'ai reçu les différentes erreurs mentionnées. Je l'ai juste testé sur une machine Linux et tout fonctionne comme prévu. Merci. – BlueBadger