Исполняемый Файл 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.
для портативного способа сделать это, я рекомендую Розуэлл.
для любой поддерживаемой реализации вы можете создать сценарии 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)