Compilando Binários com Clozure Common Lisp
-
08-07-2019 - |
Pergunta
Dado um programa simples como o seguinte, como você:
-
compilá-lo como um arquivo de imagem separado para ser carregado pela implementação e quais os argumentos de linha de comando que você usaria para carregá-lo?
-
compilá-lo como um binário autônomo que pode ser carregado e executado como é.
Nota: Eu tentei adicionar ": prepend-kernel t". Quando salvar o aplicativo só para ter o erro a seguir jogado
Error: value NIL is not of the expected type REAL. While executing: CCL::<-2, in process Initial(0).
-
Como você suprimir a mensagem de boas-vindas?
O Programa
(defun main () (format t "This is the program.")0)
Editar
O ódio a resposta parte da minha própria pergunta, mas eu achei que não obstante.
Após a função tiver sido carregado tipo a que se segue para compilar:
(ccl:save-application "app")
Isso cria um arquivo de imagem. Para carregá-lo passando-a para o tipo de aplicação (nota: o 'CCL' binário está no meu caminho do sistema);
ccl -I app
Para executar uma função de nível superior passá-lo como um parâmetro
ccl -I app --eval (main)
Solução
Consulte a documentação Clozure Common Lisp sob Applications Salvando
Compilando e Carregando Lisp arquivos
Você pode compilar um arquivo chamado /foo/bar.lisp
chamando
(compile-file "/foo/bar.lisp")
Isto irá criar um arquivo fasl (carga rápida), que contém código nativo.
Você pode carregar o arquivo compilado, o arquivo fasl, com o LOAD
função. LOAD
e COMPILE-FILE
são funções padrão Lisp Comum.
aplicações Criando
Algumas definições:
- CCL do kernel :. A parte da CCL, que proporciona baixo nível de tempos de execução de serviços como gerenciamento de memória
- Imagem : um despejo salvo do Lisp pilha
- Aplicação : CCL do kernel + imagem. Isso pode ser em um arquivo.
Você pode salvar uma aplicação chamando uma função CCL específica:
(save-application "/foo/bar-image" :toplevel-function #'main)
Isto irá salvar uma imagem, que você pode executar usando o kernel CCL de um shell de comando:
ccl -I /foo/bar-image
Para salvar um executável que inclui o kernel usar isso a partir de Lisp:
(save-application "/foo/bar-app"
:toplevel-function #'main
:prepend-kernel t)
Você pode chamar este executável como de costume com /foo/bar-app
a partir de um shell de comando.
Em Clozure Common Lisp você pode verificar
*command-line-argument-list*
para a lista de argumentos de linha de comando fornecidas.