Pregunta

Acabo de empezar a aprender Lisp y no sé cómo compilar y vincular código Lisp a un ejecutable.

Estoy usando clisp y clisp -c produce dos archivos:

  • .fas
  • .lib

¿Qué hago a continuación para obtener un ejecutable?

¿Fue útil?

Solución

En realidad estaba tratando de hacer esto hoy, y encontré que escribir esto en CLisp REPL funcionó:

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

donde main es el nombre de la función a la que desea llamar cuando se inicia el programa, :QUIET t suprime el banner de inicio y :EXECUTABLE t crea un ejecutable nativo.

También puede ser útil llamar

(EXT:EXIT)

al final de su función principal para evitar que el usuario obtenga un mensaje interactivo de lisp cuando finalice el programa.

EDITAR: al leer la documentación, también puede agregar :NORC t (lea enlace ). Esto suprime la carga del archivo RC (por ejemplo, ~/.clisprc.lisp).

Otros consejos

Esta es una Preguntas frecuentes de Lisp (ligeramente adaptada):

  

*** ¿Cómo hago un ejecutable desde mi programa?

     

Esto depende de su implementación; deberás consultar a tu   documentación del proveedor.

     
      
  • Con ECL y GCL, el proceso de compilación estándar    producir un ejecutable nativo.

  •   
  • Con LispWorks, consulte la sección Guía del usuario de entrega de    documentación.

  •   
  • Con Allegro Common Lisp, consulte la sección Entrega de    manual.

  •   
  • etc...

  •   
     

Sin embargo, la forma clásica de interactuar con los programas Common Lisp     no involucra ejecutables independientes. Consideremos esto durante     dos fases del proceso de desarrollo: programación y entrega.

     

Fase de programación : El desarrollo común de Lisp tiene más de un     sensación incremental que es común en lenguajes orientados a lotes, donde un     El ciclo de edición-compilación-enlace es común. Un desarrollador CL ejecutará simple     pruebas e interacciones transitorias con el medio ambiente en el     REPL (o Read-Eval-Print-Loop, también conocido como el      oyente ). El código fuente se guarda en archivos, y la compilación / carga     las dependencias entre los archivos de origen se registran en una descripción del sistema     instalación como ASDF (que juega un papel similar a make en     editar-compilar-vincular sistemas). La función de descripción del sistema proporciona     comandos para construir un sistema (y solo recompilar archivos cuyos     las dependencias han cambiado desde la última compilación) y para cargar un     sistema en la memoria.

     

Las implementaciones de Lisp más comunes también proporcionan un " save-world " mecanismo     eso hace posible guardar una instantánea de la imagen actual de lisp,     en una forma que luego se puede reiniciar. Un entorno común de Lisp     generalmente consiste en un tiempo de ejecución ejecutable relativamente pequeño y un     archivo de imagen más grande que contiene el estado del mundo lisp. Una común     El uso de esta función es volcar una imagen personalizada que contiene todos los     crear herramientas y bibliotecas que se utilizan en un proyecto determinado, en orden     para reducir el tiempo de inicio. Por ejemplo, esta instalación está disponible en     el nombre EXT: SAVE-LISP en CMUCL, SB-EXT: SAVE-LISP-AND-DIE en     SBCL, EXT: SAVEINITMEM en CLISP y CCL: SAVE-APPLICATION en     OpenMCL. La mayoría de estas implementaciones pueden anteponer el tiempo de ejecución a     imagen, por lo que es ejecutable.

     

Entrega de aplicaciones : en lugar de generar un solo ejecutable     archivo para una aplicación, los desarrolladores de Lisp generalmente guardan una imagen     que contiene su aplicación y la entrega a los clientes junto con     el tiempo de ejecución y posiblemente un contenedor de shell-script que invoca el     tiempo de ejecución con la imagen de la aplicación. En plataformas Windows, esto puede ser     oculto para el usuario mediante el uso de una herramienta de tipo click-o-matic InstallShield.

Echa un vistazo a la página oficial de clisp. Hay una pregunta frecuente que responde a esta pregunta.

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

CLiki también tiene una buena respuesta: Creación de ejecutables

Para una forma portátil de hacer esto, recomiendo roswell .

Para cualquier implementación compatible, puede crear scripts lisp para ejecutar el programa que se puede ejecutar de forma portátil con ros, que se puede utilizar en una línea hash-bang de manera similar a un programa python o ruby.

Para SBCL y CCL, roswell también puede crear ejecutables binarios con ros dump executable.

Sé que esta es una pregunta antigua, pero el código Lisp que estoy viendo tiene 25 años :-)

No pude hacer que la compilación funcionara con clisp en Windows 10. Sin embargo, funcionó para mí con gcl .

Si mi archivo lisp es jugs2.lisp,

gcl -compile jugs2.lisp

Esto produce el archivo jugs2.o si el archivo jugs2.lisp no tiene errores.

Ejecute gcl sin parámetros para iniciar el intérprete lisp:

gcl

Cargue el archivo .o:

(load "jugs2.o")

Para crear un EXE:

(si:save-system "jugs2")

Cuando se ejecuta el EXE, necesita la DLL oncrpc.dll; esto está en la carpeta <gcl install folder>\lib\gcl-2.6.1\unixport que crea gcl.bat.

Cuando se ejecuta, muestra un entorno lisp, llame a (main) para ejecutar la función principal (principal).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top