Pergunta

Acabei de começar a aprender Lisp e não consigo descobrir como compilar e vincular o código Lisp a um executável.

estou a usar clisp e clisp -c produz dois arquivos:

  • .fas
  • .lib

O que devo fazer a seguir para obter um executável?

Foi útil?

Solução

Na verdade, eu estava tentando fazer isso hoje e descobri que digitar isso no CLisp REPL funcionou:

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

onde main é o nome da função que você deseja chamar quando o programa for iniciado, :QUIET t suprime o banner de inicialização e :EXECUTABLE t cria um executável nativo.

Também pode ser útil ligar

(EXT:EXIT)

no final de sua função principal para impedir que o usuário receba um prompt interativo do lisp quando o programa for concluído.

EDITAR:Lendo a documentação, você também pode querer adicionar :NORC t(ler link).Isso suprime o carregamento do arquivo RC (por exemplo, ~/.clisprc.lisp).

Outras dicas

Isto é um Perguntas frequentes sobre Lisp (ligeiramente adaptado):

*** Como faço um executável do meu programa?

Isso depende da sua implementação;Você precisará consultar a documentação do seu fornecedor.

  • Com o ECL e o GCL, o processo de compilação padrão produzirá um executável nativo.

  • Com LispWorks, veja o Guia do usuário de entrega Seção da documentação.

  • Com Allegro Common Lisp, consulte o Entrega seção do manual.

  • etc...

No entanto, a maneira clássica de interagir com programas LISP comuns não envolve executáveis ​​independentes.Vamos considerar isso durante duas fases do processo de desenvolvimento:programação e entrega.

Fase de programação:O desenvolvimento LISP comum tem mais uma sensação incremental do que é comum em idiomas orientados a lotes, onde é comum um ciclo de edição-compilação.Um desenvolvedor de CL executará testes simples e interações transitórias com o ambiente no repl (ou em loop de leitura-eval-Print, também conhecido como o ouvinte).O código-fonte é salvo em arquivos e as dependências de construção/carga entre os arquivos de origem são gravadas em um recurso de descrição do sistema, como o ASDF (que desempenha um papel semelhante ao fazer em sistemas de edição-compilação de link).O recurso de descrição do sistema fornece comandos para criar um sistema (e apenas recompilar arquivos cujas dependências foram alteradas desde a última compilação) e para carregar um sistema na memória.

As implementações LISP mais comuns também fornecem um mecanismo de "mundo salvo" que possibilita salvar um instantâneo da imagem LISP atual, em uma forma que pode ser reiniciada posteriormente.Um ambiente LISP comum geralmente consiste em um tempo de execução executável relativamente pequeno e um arquivo de imagem maior que contém o estado do mundo Lisp.Um uso comum desta instalação é despejar uma imagem personalizada que contenha todas as ferramentas de construção e bibliotecas usadas em um determinado projeto, a fim de reduzir o tempo de inicialização.Por exemplo, esse recurso está disponível sob o nome Ext: Salve-Lisp no CMUCL, SB-EXT: Salvar-Lisp-and-Die no SBCL, EXT: SAVEINITMEM em Clisp e CCL: Salvar-Aplicação no OpenMCl.A maioria dessas implementações pode prender o tempo de execução à imagem, tornando -a executável.

Entrega de aplicativos:Em vez de gerar um único arquivo executável para um aplicativo, os desenvolvedores LISP geralmente salvam uma imagem que contém seu aplicativo e o entrega aos clientes junto com o tempo de execução e possivelmente um invólucro de shell-script que chama o tempo de execução com a imagem do aplicativo.Nas plataformas do Windows, isso pode ser oculto do usuário usando uma ferramenta de tipo de instalação click-o-matic.

Dê uma olhada na página inicial oficial do clip.Existe um FAQ que responde a esta pergunta.

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

CLiki também tem uma boa resposta: Criando Executáveis

Para uma maneira portátil de fazer isso, eu recomendo roswell.

Para qualquer implementação suportada você pode criar scripts lisp para executar o programa que pode ser executado de forma portátil por ros que pode ser usado em uma linha hash-bang da mesma forma que um programa python ou ruby.

Para SBCL e CCL roswell também pode criar executáveis ​​binários com ros dump executable.

Eu sei que esta é uma pergunta antiga, mas o código Lisp que estou vendo tem 25 anos :-)

Não consegui fazer a compilação funcionar com o clip no Windows 10.No entanto, funcionou para mim com gcl.

Se meu arquivo lisp for jugs2.lisp,

gcl -compile jugs2.lisp

Isso produz o arquivo jugs2.o se o arquivo jugs2.lisp não tiver erros.

Execute gcl sem parâmetros para iniciar o interpretador lisp:

gcl

Carregue o arquivo .o:

(load "jugs2.o")

Para criar um EXE:

(si:save-system "jugs2")

Quando o EXE é executado ele precisa da DLL oncrpc.dll;isso está no <gcl install folder>\lib\gcl-2.6.1\unixport pasta que gcl.bat cria.

Quando executado, mostra um ambiente LISP, ligue (principal) para executar a função principal (principal).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top