Вопрос

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

я использую 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, в котором есть ответ на этот вопрос.

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

У 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).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top