SBCL(Steel Bank Common Lisp) 스크립트 시작 노트

2024 단어
sbcl가 스크립트 형식 (sbcl --script) 으로 실행되면 추가 파일을 불러오지 않습니다.우리의 스크립트에 다른 의존이 있을 때, 매우 까다로워진다.다음은 sbcl의 스크립트 환경을 어떻게 설정하는지 저의 실제 경험(출석하는 작은 기능)으로 소개합니다.
우선, 호출 스크립트가 필요합니다. 파일 이름은sign입니다.lisp.안의 내용은 매우 간단하지만 다른 시스템sign에 의존해야 한다.lisp:
(in-package :cl-user)
(require :cl-163-music)

(multiple-value-bind (res0 res1)
 (cl-163-music:daily-sign "username" "password")
 (format t "~A ~% ~A ~%" res0 res1))

그리고 셸에서 sbcl를 호출해서 sign을 불러옵니다.lisp
#!/usr/bin/env sh
PATH="/Users/nero/devel/shell/163.music.sign/"
SBCL_PATH="/Users/nero/tanshuai/sbcl/bin/"

${SBCL_PATH}sbcl --noinform --core ${PATH}core --script ${PATH}sign.lisp

셸도 간단하지만 --core 옵션이 있습니다.자, 포인트가 왔습니다. 코어 파일은 무엇입니까?어떻게 생성되었습니까?
core 파일은 환경 이미지 파일로 스크립트의 의존을 해결하고 실행 시 환경 패키지를 제공하며 실행 시 모든 상태를 포함한다. 우리는 모든 필수 조건을 불러온 후 sb-ext:save-lisp-and-die로 생성된 이미지 파일을 불러올 수 있다.
cl-163-music는 asdf 구조에 부합되기 때문에 이곳에서 나는lisp의 삼자 관리 패키지quicklisp(python의 pip,nodejs의 npm 등과 유사하여 어떻게 설치했는지 여기에서 설명하지 않음)를 사용했다.quicklisp는 자동으로 asdf 프로젝트를 관리하여cl-163-music의 의존을 해결할 것이다.cl-163-뮤직은 자체 로컬 프로젝트이며sign.lisp리(require :cl-163-music)의 필요로 인해 거울을 생성하기 전의 필요(push #P"/Users/nero/devel/lisp/cl-163-music/" asdf:*central-registry*).여기까지 모든 작업이 끝났습니다. 여기에 에피소드가 하나 있습니다. 제가 운행할 때 오류가 발생했습니다.
ASDF could not load cl-163-music because
Don't know how to REQUIRE sb-rotate-byte.
See also:
  The SBCL Manual, Variable *MODULE-PROVIDER-FUNCTIONS*
  The SBCL Manual, Function REQUIRE.
Unhandled SB-INT:EXTENSION-FAILURE in thread #:
  Don't know how to REQUIRE sb-rotate-byte.
See also:
  The SBCL Manual, Variable *MODULE-PROVIDER-FUNCTIONS*
  The SBCL Manual, Function REQUIRE
... ...
...

해결 방법은 sbcl 환경에 다시 들어가서 (require "sb-rotate-byte") 실행한 다음에 다시 거울을 생성하는 것이다.
ps: 단점은 거울 파일이 너무 커서 약 50MB가 넘는다.
출석 작은 기능:cl-163-music

좋은 웹페이지 즐겨찾기