Компиляция двоичных файлов с помощью Clozure Common Lisp

StackOverflow https://stackoverflow.com/questions/833314

Вопрос

Учитывая простую программу, такую как следующая, как бы вы:

  1. скомпилируйте его как отдельный файл изображения, который будет загружен реализацией, и какие аргументы командной строки вы бы использовали для его загрузки?

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

    Примечание:Я попытался добавить ":prepend-kernel t" при сохранении приложения только для того, чтобы выдать следующую ошибку.

    Error: value NIL is not of the
    expected type REAL. While executing: 
    CCL::<-2, in process Initial(0).
    
  3. Как бы вы подавили приветственное сообщение?

    Программа

    (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*

для получения списка предоставленных аргументов командной строки.

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