Domanda

Ho appena iniziato a imparare Lisp e non riesco a capire come compilare e collegare il codice Lisp a un eseguibile.

sto usando clisp E clisp -c produce due file:

  • .fas
  • .lib

Cosa devo fare per ottenere un eseguibile?

È stato utile?

Soluzione

In realtà stavo provando a farlo oggi e ho scoperto che digitarlo nel CLisp REPL funzionava:

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

dove main è il nome della funzione che vuoi chiamare all'avvio del programma, :QUIET t sopprime il banner di avvio e :EXECUTABLE t crea un eseguibile nativo.

Può essere utile anche chiamare

(EXT:EXIT)

alla fine della funzione principale per impedire all'utente di ricevere un prompt lisp interattivo al termine del programma.

MODIFICARE:Leggendo la documentazione, potresti anche voler aggiungere :NORC t(Leggere collegamento).Ciò elimina il caricamento del file RC (ad esempio, ~/.clisprc.lisp).

Altri suggerimenti

Questo è un Domande frequenti su Lisp (leggermente adattato):

*** Come faccio a creare un eseguibile dal mio programma?

Dipende dalla tua implementazione;Dovrai consultare la documentazione del tuo fornitore.

  • Con ECL e GCL, il processo di compilazione standard produrrà un eseguibile nativo.

  • Con LispWorks, vedere il Guida per l'utente di consegna sezione della documentazione.

  • Con Allegro Common Lisp, vedere il Consegna sezione del manuale.

  • eccetera...

Tuttavia, il modo classico di interagire con programmi LISP comuni non comporta eseguibili autonomi.Consideriamo questo durante due fasi del processo di sviluppo:programmazione e consegna.

Fase di programmazione:Lo sviluppo di LISP comune ha più di una sensazione incrementale di quanto sia comune nelle lingue orientate ai batch, in cui è comune un ciclo di collegamento a composizione modifica.Uno sviluppatore di CL eseguirà test semplici e interazioni transitorie con l'ambiente presso il repl (o lettura-evalo-stampa, noto anche come il ascoltatore).Il codice sorgente viene salvato nei file e le dipendenze build/caricamento tra i file di origine vengono registrate in una funzione di descrizione del sistema come ASDF (che svolge un ruolo simile a Fare Nei sistemi EDIT-Compile-Link).La funzione di descrizione del sistema fornisce comandi per la creazione di un sistema (e solo ricompilare i file le cui dipendenze sono cambiate dall'ultima build) e per il caricamento di un sistema in memoria.

Le implementazioni LISP più comuni forniscono anche un meccanismo di "salvataggio del mondo" che consente di salvare un'istantanea dell'attuale immagine LISP, in una forma che può successivamente essere riavviata.Un ambiente LISP comune è generalmente costituito da un runtime eseguibile relativamente piccolo e un file di immagine più ampio che contiene lo stato del mondo LISP.Un uso comune di questa struttura è di scaricare un'immagine personalizzata contenente tutti gli strumenti di build e le librerie utilizzate su un determinato progetto, al fine di ridurre i tempi di avvio.Ad esempio, questa struttura è disponibile con il nome Ext: Save-Lisp in CMUCL, SB-Ext: Save-Lisp-and-Die in SBCL, Ext: SaveInitMem in Clisp e CCL: Salva-Applicazione in OpenMCL.La maggior parte di queste implementazioni può preparare il runtime all'immagine, rendendolo eseguibile.

Consegna delle applicazioni:Invece di generare un singolo file eseguibile per un'applicazione, gli sviluppatori LISP generalmente salvano un'immagine contenente la loro applicazione e la consegna ai client insieme al runtime e possibilmente a un wrapper Shell-script che invoca il runtime con l'immagine dell'applicazione.Sulle piattaforme Windows questo può essere nascosto all'utente utilizzando uno strumento Tipo di installazione Click-O-Matic.

Dai un'occhiata alla homepage ufficiale di clipp.C'è una FAQ che risponde a questa domanda.

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

Anche CLiki ha una buona risposta: Creazione di eseguibili

Per un modo portatile per farlo, lo consiglio roswell.

Per qualsiasi implementazione supportata è possibile creare script lisp per eseguire il programma che può essere eseguito in modo portabile ros che può essere utilizzato in una riga hash-bang in modo simile a un programma Python o Ruby.

Per SBCL e CCL roswell può anche creare eseguibili binari con ros dump executable.

So che questa è una vecchia domanda ma il codice Lisp che sto guardando ha 25 anni :-)

Non sono riuscito a far funzionare la compilazione con clisp su Windows 10.Tuttavia, per me ha funzionato gcl.

Se il mio file lisp è jugs2.lisp,

gcl -compile jugs2.lisp

Questo produce il file jugs2.o se il file jugs2.lisp non contiene errori.

Esegui gcl senza parametri per avviare l'interprete lisp:

gcl

Carica il file .o:

(load "jugs2.o")

Per creare un EXE:

(si:save-system "jugs2")

Quando viene eseguito l'EXE, è necessaria la DLL oncrpc.dll;questo è nel <gcl install folder>\lib\gcl-2.6.1\unixport cartella creata da gcl.bat.

Se eseguito mostra un ambiente LISP, chiama (principale) per eseguire la funzione principale (principale).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top