Исполняемый файл Лиспа
-
09-06-2019 - |
Вопрос
Я только начал изучать Лисп и не могу понять, как скомпилировать и связать код Лиспа с исполняемым файлом.
я использую clisp
и clisp -c
создает два файла:
- .fas
- .lib
Что мне делать дальше, чтобы получить исполняемый файл?
Решение
На самом деле я пытался сделать это сегодня и обнаружил, что ввод этого в CLisp REPL сработал:
(EXT:SAVEINITMEM "executable.exe"
:QUIET t
:INIT-FUNCTION 'main
:EXECUTABLE t
:NORC t)
где main — имя функции, которую вы хотите вызывать при запуске программы, :QUIET t
подавляет баннер запуска и :EXECUTABLE t
создает собственный исполняемый файл.
Также может быть полезно позвонить
(EXT:EXIT)
в конце вашей основной функции, чтобы пользователь не получал интерактивное приглашение на языке Lisp после завершения программы.
РЕДАКТИРОВАТЬ:Читая документацию, вы также можете добавить :NORC t
(читать связь).Это подавляет загрузку файла RC (например, ~/.clisprc.lisp
).
Другие советы
Это Часто задаваемые вопросы по Лиспу (немного адаптировано):
*** Как мне создать исполняемый файл из моей программы?
Это зависит от вашей реализации;Вам нужно будет проконсультироваться с документацией вашего поставщика.
С помощью ECL и GCL стандартный процесс компиляции будет создавать собственного исполняемого файла.
Используя LispWorks, см. Руководство пользователя доставки раздел документации.
Используя Allegro Common Lisp, см. Доставка раздел руководства.
и т. д...
Тем не менее, классический способ взаимодействия с обычными программами LISP не включает отдельные исполняемые файлы.Давайте рассмотрим это на двух этапах процесса разработки:программирование и доставка.
Этап программирования:Обычное развитие LISP имеет больше дополнительного ощущения, чем распространено на партийных языках, где распространен цикл редактирования-компиляции.Разработчик CL проведет простые тесты и переходные взаимодействия с окружающей средой в Repl (или счетной печени, также известной как слушатель).Исходный код сохраняется в файлах, а зависимости от сборки/загрузки между исходными файлами записываются в системном оборудовании, таком как ASDF (который играет аналогичную роль с делать В системах редактирования-компиляции).Системная установка предоставляет команды для построения системы (и только перекомпиляцию файлов, зависимости которых изменились с момента последней сборки) и для загрузки системы в память.
Наиболее распространенные реализации LISP также предоставляют механизм «сохранить мир», который позволяет сохранить снимок текущего изображения LISP в форме, которая впоследствии может быть перезапущена.Общая среда LISP обычно состоит из относительно небольшого исполняемого времени выполнения и более крупного файла изображения, который содержит состояние мира LISP.Общее использование этого объекта состоит в том, чтобы сбрасывать индивидуальное изображение, содержащее все инструменты сборки и библиотеки, которые используются в данном проекте, чтобы сократить время запуска.Например, этот объект доступен под названием Ext: Save-Lisp в CMUCL, SB-Ext: Save-Lisp и Die в SBCL, Ext: SaveInitMem в Clisp и CCL: Save-Application в OpenMCl.Большинство из этих реализаций могут подготовить время выполнения к изображению, что делает его исполняемым файлом.
Доставка приложений:Вместо того, чтобы генерировать один исполняемый файл для приложения, разработчики LISP обычно сохраняют изображение, содержащее их приложение, и доставляют его клиентам вместе со временем выполнения и, возможно, оберткой Shell-Script, которая вызывает время выполнения с изображением приложения.На платформах Windows это может быть скрыто от пользователя, используя инструмент типа Click-O-Matic InstallShield.
Взгляните на официальную домашнюю страницу clisp.Существует FAQ, в котором есть ответ на этот вопрос.
У CLiki также есть хороший ответ: Создание исполняемых файлов
Для портативного способа сделать это я рекомендую Розуэлл.
Для любой поддерживаемой реализации вы можете создавать сценарии Lisp для запуска программы, которую можно запускать переносимым способом: ros
который можно использовать в строке hash-bang, как, например, в программе Python или Ruby.
Для SBCL и CCL Roswell также может создавать двоичные исполняемые файлы с помощью ros dump executable
.
Я знаю, что это старый вопрос, но коду Lisp, на который я смотрю, уже 25 лет :-)
Мне не удалось заставить компиляцию работать с clisp в Windows 10.Однако у меня это сработало с гкл.
Если мой файл Lisp — jugs2.lisp,
gcl -compile jugs2.lisp
При этом создается файл jugs2.o, если в файле jugs2.lisp нет ошибок.
Запустите gcl без параметров, чтобы запустить интерпретатор Lisp:
gcl
Загрузите файл .o:
(load "jugs2.o")
Чтобы создать EXE-файл:
(si:save-system "jugs2")
Когда EXE запускается, ему нужна DLL. oncrpc.dll
;это в <gcl install folder>\lib\gcl-2.6.1\unixport
папка, которую создает gcl.bat.
При запуске она показывает среду LISP, вызовите (Main), чтобы запустить основную функцию (Main).