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

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

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

  • .fas
  • .lib

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

Ответ 1

Я действительно пытался это сделать сегодня, и я нашел, что набрал это в 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).

Ответ 2

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

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

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

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

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

  • С Allegro Common Lisp, см. раздел "Доставка"  руководство.

  • и т.д...

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

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

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

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

Ответ 5

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

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

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

Ответ 6

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

Я не мог заставить компиляцию работать с clisp в Windows 10. Однако это сработало для меня с gcl

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

;; my 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 ;; это находится в папке \lib\gcl-2.6.1\unixport, созданной gcl.bat.

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