2009-05-07 19 views
24

dado un programa simple como la siguiente, ¿cómo:binarios compilar con Clozure Common Lisp

  1. compilar como un archivo de imagen separado para ser cargados por la aplicación, y los argumentos de línea lo mando, ¿Le usar para cargarlo?

  2. Compilarlo como un archivo binario independiente que se puede cargar y ejecutar como está.

    Nota: Intenté agregar ": prepend-kernel t" al guardar la aplicación solo para que arroje el siguiente error.

    Error: value NIL is not of the 
    expected type REAL. While executing: 
    CCL::<-2, in process Initial(0). 
    
  3. ¿Cómo le suprimir el mensaje de bienvenida?

    El Programa

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

Editar

odio para responder a parte de mi propia pregunta, pero me pareció que no lo es menos.

Después de la función se ha cargado el siguiente tipo de compilarlo:

(ccl:save-application "app") 

Esto crea un archivo de imagen. Para cargarlo pasándolo al tipo de implementación (nota: el binario 'ccl' está en la ruta de mi sistema);

ccl -I app 

para ejecutar una función de nivel superior pasarlo como un parámetro

ccl -I app --eval (main) 

Respuesta

28

consulte la documentación Clozure Common Lisp bajo Saving Applications

la compilación y la carga de archivos Lisp

Puede compila un archivo llamado /foo/bar.lisp llamando al

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

Esto creará un archivo fasl (carga rápida), que contiene el código nativo.

Puede cargar el archivo compilado, el archivo fasl, con la función LOAD. LOAD y COMPILE-FILE son funciones comunes de labios comunes.

aplicaciones Creación de

Algunas definiciones:

  • CCL núcleo: la parte del CCL tiempos de ejecución que proporciona servicios de bajo nivel, como la gestión de memoria.
  • imagen: un vertedero salvado del montón Lisp
  • Aplicación: CCL kernel + imagen. Esto puede estar en un archivo.

Puede guardar una aplicación llamando a una función específica CCL:

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

Esto ahorrará una imagen, que se puede ejecutar usando el núcleo CCL desde una consola de comandos:

ccl -I /foo/bar-image 

Para guardar un ejecutable que incluye el kernel, use esto de Lisp:

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

Puede llamar este ejecutable como de costumbre con /foo/bar-app desde un shell de comandos.

En Clozure Common Lisp puede comprobar

*command-line-argument-list* 

para la lista de argumentos de línea de comandos que se proporcionan.

+0

Se corrigió el error. Además, la aplicación se creó como se esperaba, pero cuando traté de cargar el exe, un mensaje de error me dijo que el "Programa era demasiado grande para caber en la memoria". ¿Te has encontrado con esto antes? ¿Sabes de una solución? – BlueBadger

+0

vea mi edición, use prepend-kernel para agregar el kernel al archivo –

+0

Estaba probando todo esto en su implementación de Windows y recibí los diversos errores mencionados. Acabo de probarlo en una máquina Linux y todo funciona como se esperaba. Gracias. – BlueBadger