Ejecutable Lisp


Acabo de empezar a aprender Lisp y no puedo averiguar 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?

Author: Rainer Joswig, 2008-08-24

6 answers

En realidad estaba tratando de hacer esto hoy, y encontré que escribir esto en el 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 que desea llamar cuando se inicie el programa, :QUIET t suprime el banner de inicio y :EXECUTABLE t crea un ejecutable nativo.

También puede ser útil llamar a

(EXT:EXIT)

Al final de su función principal con el fin de evitar que el usuario reciba un mensaje interactivo lisp cuando el programa haya terminado.

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

 48
Author: thekidder,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-08-22 19:07:36

Esto es un FAQ Lisp (ligeramente adaptado):

*** ¿Cómo puedo hacer un ejecutable desde mi programa?

Esto depende de su implementación; tendrá que consultar su 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 Delivery User's Guide de la documentación.

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

  • Etc...

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

Fase de programación : El desarrollo de Common Lisp tiene sensación incremental que es común en el lote-orientado idiomas, donde un el ciclo edit-compile-link 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 archivos de origen se registran en un sistema-descripción instalación como ASDF (que juega un papel similar a hacer en edit-compile-link systems). El sistema-descripción instalación proporciona comandos para construir un sistema (y solo recompilar archivos cuya dependencias han cambiado desde la última compilación), y para cargar un sistema en memoria.

Las implementaciones más comunes de Lisp también proporcionan un mecanismo de "salvar el mundo" esto hace posible guardar una instantánea de la imagen lisp actual, en una forma que más tarde se puede reiniciar. Un entorno de Common Lisp generalmente consiste en un tiempo de ejecución relativamente pequeño, y un imagen más grande archivo que contiene el estado del mundo lisp. Común el uso de esta instalación es volcar una imagen personalizada que contiene todos los construir herramientas y bibliotecas que se utilizan en un proyecto dado, en orden para reducir el tiempo de inicio. For instance, this facility is available under el nombre EXT:SAVE-LISP in CMUCL, SB-EXT: SAVE-LISP-AND-DIE in SBCL, EXT: SAVEINITMEM in CLISP, and CCL: SAVE-APPLICATION in OpenMCL. La mayoría de estas implementaciones pueden anteponer el tiempo de ejecución al imagen, por lo que es ejecutable.

Application delivery: 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 entregarlo a los clientes junto con el tiempo de ejecución y posiblemente un envoltorio de shell-script que invoca tiempo de ejecución con la imagen de la aplicación. En plataformas Windows esto puede ser oculto al usuario mediante una herramienta de tipo click-o-matic InstallShield.

 35
Author: Luís Oliveira,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-08-27 23:40:49

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

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

 14
Author: Patrik Svensson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-08-24 13:55:29

CLiki también tiene una buena respuesta: Creando ejecutables

 14
Author: Luís Oliveira,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-06-25 17:32:51

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

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

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

 2
Author: Thayne,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-12-10 06:36:15

;; 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

Https://www.cs.utexas.edu/users/novak/gclwin.html

;; mi archivo lisp es jugs2.lisp

Gcl-compile jugs2.lisp ;; esto produce el archivo jugs2.o si jugs2.el archivo lisp no tiene errores

;; ejecute gcl sin parámetros para iniciar lisp interprete gcl

;; cargar el .o file

(carga "jarras 2.o")

;; crear un exe

(si: save-system "jugs2")

;; cuando se ejecuta el exe necesita el dll oncrpc.DLL ;; esto está en la carpeta \lib\gcl-2.6.1\unixport que gcl.bat crea.

;; cuando se ejecuta muestra un entorno lisp, llama a (main) para ejecutar la función main (principal)

 -1
Author: Paul McCarthy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-08-26 02:02:05