Kompilowanie binariów za pomocą Clozure Common Lisp
Biorąc pod uwagę prosty program, taki jak poniżej, jak byś:
Skompilować go jako oddzielny plik obrazu, który ma być załadowany przez implementację i jakich argumentów linii poleceń użyłbyś do załadowania go?
-
Skompiluj go jako samodzielny plik binarny, który można załadować i uruchomić tak, jak jest.
Uwaga: próbowałem dodać ": prepend-kernel t " podczas zapisywania aplikacji tylko po to, aby błąd follow został wyrzucony.
Error: value NIL is not of the expected type REAL. While executing: CCL::<-2, in process Initial(0).
-
Jak byś się supresował wiadomość powitalna?
Program
(defun main () (format t "This is the program.")0)
Edit
Nie chcę odpowiadać na część mojego pytania, ale znalazłem je.Po załadowaniu funkcji wpisz następujący tekst, aby ją skompilować:
(ccl:save-application "app")
Tworzy plik obrazu. Aby go załadować, przekazując go do typu implementacji (Uwaga: binarny 'ccl' znajduje się w mojej ścieżce systemowej);
ccl -I app
Aby uruchomić funkcję najwyższego poziomu podaj ją jako parametr
ccl -I app --eval (main)
1 answers
Zobacz dokumentację Clozure Common Lisp pod zapisywanie aplikacji
Kompilowanie i wczytywanie plików Lisp
Możesz skompilować plik o nazwie /foo/bar.lisp
wywołując
(compile-file "/foo/bar.lisp")
Spowoduje to utworzenie pliku fasl (Szybkie Ładowanie), który zawiera kod natywny.
Możesz załadować skompilowany plik, plik fasl, za pomocą funkcji LOAD
. LOAD
i COMPILE-FILE
są standardowymi funkcjami Common Lispu.
Tworzenie aplikacje
Kilka definicji:
- CCL kernel : część CCL, która zapewnia usługi niskopoziomowego uruchamiania, takie jak zarządzanie pamięcią.
- Obraz : zapisany zrzut sterty Lispu
- Application : CCL kernel + image. To może być w jednym pliku.
Możesz zapisać aplikację, wywołując określoną funkcję CCL:
(save-application "/foo/bar-image" :toplevel-function #'main)
Spowoduje to zapisanie obrazu, który można uruchomić za pomocą jądra CCL z command shell:
ccl -I /foo/bar-image
Aby zapisać plik wykonywalny zawierający jądro, użyj tego z Lispu:
(save-application "/foo/bar-app"
:toplevel-function #'main
:prepend-kernel t)
Możesz wywołać ten plik wykonywalny jak zwykle za pomocą /foo/bar-app
z powłoki poleceń.
W Clozure Common Lisp możesz sprawdzić
*command-line-argument-list*
Dla listy podanych argumentów wiersza poleceń.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-22 07:26:54