Я только начал изучать Lisp, и я не могу понять, как скомпилировать и связать код Lisp с исполняемым файлом.
Я использую clisp
и clisp -c
создает два файла:
- .fas
- .lib
Что мне делать, чтобы получить исполняемый файл?
Я только начал изучать Lisp, и я не могу понять, как скомпилировать и связать код Lisp с исполняемым файлом.
Я использую clisp
и clisp -c
создает два файла:
Что мне делать, чтобы получить исполняемый файл?
Я действительно пытался это сделать сегодня, и я нашел, что набрал это в 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, см. раздел "Доставка" руководство.
и т.д...
Однако классический способ взаимодействия с 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.
Взгляните на официальную домашнюю страницу. На этот вопрос отвечает FAQ.
CLiki также имеет хороший ответ: Создание исполняемых файлов
Для портативного способа сделать это, я рекомендую roswell.
Для любой поддерживаемой реализации вы можете создавать скрипты 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
;; 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, вызов (основной) для запуска основной функции (Основной)