2009-05-07 7 views
24

dato un semplice programma come il seguente, come è possibile:la compilazione di binari con Clozure Common Lisp

  1. compilarlo come un file di immagine separato da caricare mediante l'applicazione, e argomenti della riga di quello comando VUOI usi per caricarlo?

  2. Compililo come un file binario autonomo che può essere caricato ed eseguito così com'è.

    Nota: ho provato ad aggiungere ": prepend-kernel t" durante il salvataggio dell'applicazione solo per generare il seguente errore.

    Error: value NIL is not of the 
    expected type REAL. While executing: 
    CCL::<-2, in process Initial(0). 
    
  3. Come ti sopprimere il messaggio di benvenuto?

    Il programma

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

Modifica

dispiacerebbe rispondere parte della mia domanda, ma ho trovato comunque.

Dopo che la funzione è stata caricata tipo il seguente compilarlo:

(ccl:save-application "app") 

Questo crea un file di immagine. Per caricarlo passandolo al tipo di implementazione (nota: il binario 'ccl' è nel mio percorso di sistema);

ccl -I app 

di eseguire una funzione di livello superiore passarlo come parametro

ccl -I app --eval (main) 

risposta

28

consultare la documentazione Clozure Common Lisp sotto Saving Applications

Compilazione e caricamento di file Lisp

Puoi compila un file chiamato /foo/bar.lisp chiamando il

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

Questo creerà un file FasL (caricamento rapido), che contiene il codice nativo.

È possibile caricare il file compilato, il file fasl, con la funzione LOAD. LOAD e COMPILE-FILE sono funzioni comuni del Labbro.

Creazione di applicazioni

Alcune definizioni:

  • CCL kernel: la parte del CCL che fornisce servizi di basso livello tempi di esecuzione come la gestione della memoria.
  • Immagine: una discarica salvata del mucchio Lisp
  • Applicazione: kernel CCL + immagine. Questo può essere in un file.

È possibile salvare un'applicazione chiamando una funzione specifica CCL:

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

Ciò farà risparmiare un'immagine, che è possibile eseguire utilizzando il kernel CCL da una shell di comando:

ccl -I /foo/bar-image 

Per salvare un eseguibile che include il kernel, utilizzare questo da Lisp:

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

È possibile chiamare questo eseguibile come al solito con /foo/bar-app da una shell dei comandi.

In Clozure Common Lisp è possibile controllare

*command-line-argument-list* 

per l'elenco degli argomenti della riga di comando previsti.

+0

Risolto l'errore. Inoltre, l'applicazione è stata creata come previsto, ma quando ho provato a caricare l'exe un messaggio di errore mi ha detto che il "Programma troppo grande per stare in memoria". Ti sei imbattuto in questo prima? Conosci una soluzione? – BlueBadger

+0

vedi la mia modifica, usa prepend-kernel per aggiungere il kernel al file –

+0

Stavo testando tutto questo sulla loro implementazione di Windows e ho ricevuto i vari errori menzionati. L'ho appena testato su una macchina Linux e tutto funziona come previsto. Grazie. – BlueBadger