클로즈 어 공통 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")
이것은 a를 만들 것입니다 fasl (빠른로드) 기본 코드가 포함 된 파일.
컴파일 된 파일, FASL 파일을 함수로로드 할 수 있습니다. LOAD
. LOAD
그리고 COMPILE-FILE
표준 공통 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*
제공된 명령 줄 인수 목록.