Исполняемый Файл Lisp

Я только начал изучать Lisp, и я не могу понять, как скомпилировать и связать lisp-код с исполняемым файлом.

Я использую clisp и clisp -c производит два файла:

  • .ФАС!--8-->
  • .Либ!--8-->

что мне делать дальше, чтобы получить исполняемый файл?

6 ответов


Я на самом деле пытался сделать это сегодня, и я обнаружил, что набрав это в CLISP REPL работал:

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

где main-имя функции, которую вы хотите вызвать при запуске программы,:QUIET t подавляет баннер запуска и :EXECUTABLE t создает собственный исполняемый файл.

также может быть полезно позвонить

(EXT:EXIT)

в конце вашей основной функции, чтобы остановить пользователя от получения интерактивного приглашения lisp, когда программа сделанный.

EDIT: читая документацию, вы также можете добавить :NORC t (читать ссылке). Это подавляет загрузку RC-файла (например,~/.clisprc.lisp).


Это Lisp FAQ (немного адаптированный):

* * * как сделать исполняемый файл из моей программы?

Это зависит от вашей реализации, вы должны проконсультироваться с документация поставщика.

  • с ECL и GCL, стандартный процесс компиляции будет создайте собственный исполняемый файл.

  • с помощью LispWorks см. доставка пользователя Руководство из документация.

  • с Allegro Common Lisp, см. доставка из руководство.

  • etc...

однако классический способ взаимодействия с общими программами Lisp не включает автономные исполняемые файлы. Рассмотрим это в ходе два этапа процесса разработки: программирование и осуществление.

Программирование фазы: общее развитие Lisp имеет больше инкрементное чувство, чем обычно в пакетных языках, где цикл edit-compile-link является общим. Разработчик CL будет работать просто испытания и переходные взаимодействия с окружающей средой на REPL (или Read-Eval-Print-Loop, также известный как слушатель). Исходный код сохраняется в файлах, а сборка / загрузка зависимости между исходными файлами записываются в описание системы объект, такой как ASDF (который играет аналогичную роль сделать in edit-compile-link systems). Средство систем-описания обеспечивает команды для построения системы (и только перекомпиляции файлов, зависимости изменились с момента последней сборки), а для загрузки система в память.

наиболее распространенные реализации Lisp также обеспечивают механизм " save-world это позволяет сохранить снимок текущего lisp изображение, в форме, которую позже можно перезапустить. Общая среда Lisp как правило, состоит из относительно небольшой исполняемой среды выполнения и больший файл изображения, содержащий состояние мира lisp. Обычное явление использование этого средства для сброса настроенного изображения, содержащего все создание инструментов и библиотек, используемых в данном проекте, в порядке чтобы сократить время запуска. Например, это средство доступно под имя EXT:сохранить-LISP в CMUCL, SB-EXT: сохранить-LISP-и-умереть в SBCL, EXT: SAVEINITMEM в CLISP и CCL: SAVE-приложение в OpenMCL. Большинство из этих реализаций могут добавлять среду выполнения к изображение, тем самым делая его исполняемым.

доставки приложений: вместо создания одного исполняемого файла файл для приложения, разработчики Lisp обычно сохраняют изображение содержащие их приложения, и доставляют их клиентам вместе с среда выполнения и, возможно, shell-скрипт обертка, вызывающая выполнения с изображением приложения. На платформах Windows это может быть скрыто от пользователя с помощью инструмента типа InstallShield click-o-matic.


взгляните на официальную домашнюю страницу clisp. Существует FAQ, который отвечает на этот вопрос.

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


У клики тоже есть хороший ответ:Создание Исполняемых Файлов


для портативного способа сделать это, я рекомендую Розуэлл.

для любой поддерживаемой реализации вы можете создать сценарии lisp для запуска программы, которая может быть запущена переносным способом ros который можно использовать в строке хэш-взрыва аналогично, чтобы сказать программу python или ruby.

для SBCL и CCL roswell также может создавать двоичные исполняемые файлы с помощью ros dump executable.


;; Я знаю, что это старый вопрос, но код Lisp, на который я смотрю, 25 лет: -)

Я не мог получить компиляцию, работающую с clisp в Windows 10. Тем не менее, это сработало для меня с gcl

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

;; мой файл lisp - jugs2.шепелявить!--1-->

gcl-компиляция jugs2.шепелявить ;; это создает файл jugs2.o если jugs2.lisp файл не имеет ошибок

;; запустите gcl без параметров для запуск интерпретатора lisp gcl

;; загрузить .файл о

(загрузить " jugs2.o")

;; создать exe

(si:save-система "jugs2")

;; при запуске exe требуется dll oncrpc.файл DLL ;; это находится в папке \lib\gcl-2.6.1\unixport, что gcl.летучая мышь творит.

;; при запуске он показывает среду lisp, вызовите (main) для запуска основной функции (main)