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?
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.
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).