Компиляция двоичных файлов с помощью Clozure Common Lisp
-
08-07-2019 - |
Вопрос
Учитывая простую программу, такую как следующая, как бы вы:
скомпилируйте его как отдельный файл изображения, который будет загружен реализацией, и какие аргументы командной строки вы бы использовали для его загрузки?
Скомпилируйте его как отдельный двоичный файл, который можно загрузить и запустить как есть.
Примечание:Я попытался добавить ":prepend-kernel t" при сохранении приложения только для того, чтобы выдать следующую ошибку.
Error: value NIL is not of the expected type REAL. While executing: CCL::<-2, in process Initial(0).
Как бы вы подавили приветственное сообщение?
Программа
(defun main () (format t "This is the program.")0)
Редактировать
Не хотелось бы отвечать на часть моего собственного вопроса, но, тем не менее, я нашел его.
После загрузки функции введите следующее, чтобы скомпилировать ее:
(ccl:save-application "app")
При этом создается файл изображения.Чтобы загрузить его, передав его типу реализации (примечание:двоичный файл 'ccl' находится в моем системном пути);
ccl -I app
Чтобы запустить функцию верхнего уровня, передайте ее в качестве параметра
ccl -I app --eval (main)
Решение
Смотрите документацию Clozure Common Lisp в разделе Сохранение приложений
Компиляция и загрузка файлов Lisp
Вы можете скомпилировать файл с именем /foo/bar.lisp
позвонив
(compile-file "/foo/bar.lisp")
Это создаст фасл файл (Быстрая загрузка), содержащий машинный код.
Вы можете загрузить скомпилированный файл, файл fasl, с помощью функции LOAD
. LOAD
и COMPILE-FILE
являются стандартными функциями Common Lisp.
Создание приложений
Несколько определений:
- Ядро CCL:часть CCL, которая предоставляет низкоуровневые службы среды выполнения, такие как управление памятью.
- Изображение:сохраненный дамп кучи Lisp
- Применение:Ядро CCL + изображение.Это может быть в одном файле.
Вы можете сохранить приложение, вызвав определенную для CCL функцию:
(save-application "/foo/bar-image" :toplevel-function #'main)
Это сохранит изображение, которое вы можете запустить с помощью ядра CCL из командной оболочки:
ccl -I /foo/bar-image
Чтобы сохранить исполняемый файл, включающий ядро, используйте это из Lisp:
(save-application "/foo/bar-app"
:toplevel-function #'main
:prepend-kernel t)
Вы можете вызвать этот исполняемый файл как обычно с помощью /foo/bar-app
из командной оболочки.
В Clozure Common Lisp вы можете проверить
*command-line-argument-list*
для получения списка предоставленных аргументов командной строки.