2012-02-20 13 views
5

Trên Debian, tôi đang cố gắng biên dịch chương trình CLISP sử dụng gói cl-ppcre.Làm thế nào để biên dịch một chương trình clisp sử dụng cl-ppcre?

Một mẫu, đơn giản hóa chương trình (mà tôi sẽ gọi biến thể 1) trông như thế này:

(asdf:load-system :cl-ppcre) 

(princ (cl-ppcre:regex-replace-all "a" "abcde" "x")) 
(terpri) 

Khi tôi chạy nó như vậy ::

clisp -q a3.lisp 

Tôi nhận điều này:

home:~/clisp/ercpp/compiling-program$ clisp -q a3.lisp 
; Loading system definition from /usr/share/common-lisp/systems/cl-ppcre.asd into #<PACKAGE ASDF0> 
; Registering #<SYSTEM :CL-PPCRE> as CL-PPCRE 
; Registering #<SYSTEM :CL-PPCRE-TEST> as CL-PPCRE-TEST 
0 errors, 0 warnings 
xbcde 
home:~/clisp/ercpp/compiling-program$ 

Nhưng khi tôi cố gắng biên dịch nó:

clisp -q -c a3.lisp 

Tôi nhận điều này:

home:~/clisp/ercpp/compiling-program$ clisp -q -c a3.lisp 
;; Compiling file /u/home/clisp/ercpp/compiling-program/a3.lisp ... 
*** - READ from 
     #<INPUT BUFFERED FILE-STREAM CHARACTER 
     #P"/u/home/clisp/ercpp/compiling-program/a3.lisp" @3> 
     : there is no package with name "CL-PPCRE" 

0 errors, 0 warnings 
home:~/clisp/ercpp/compiling-program$ 

tôi nhận kết quả tương tự với chạy thành công và không thành công biên dịch với biến thể 2:

(clc:clc-require :cl-ppcre) 

(princ (cl-ppcre:regex-replace-all "a" "abcde" "x")) 
(terpri) 

gì tôi cần phải làm gì để có được nó để biên dịch?

Trong trường hợp nó có thể giúp đưa ra câu trả lời, tôi đã xem tệp I/O được kích hoạt bằng cách chạy biến thể 1. Tôi đã sử dụng strace, và cắt lát và cắt nhỏ đầu ra để chỉ hiển thị tên của các tệp và thư mục có liên quan. Khi tôi đã làm điều này:

strace -o strace.1 clisp -q a3.lisp 
grep pcre strace.1  \ 
    | sed -e 's/^[^"]*"//' \ 
    | sed -e 's/".*$//' \ 
    | sort     \ 
    | uniq     \ 
    > strace.2 

tôi có đầu ra này:

(asdf:load-system :cl-ppcre)\n\n(p 
/u/home/.cache/common-lisp/clisp-2.48-unix-x86/usr/share/common-lisp/source/cl-ppcre 
/u/home/.cache/common-lisp/clisp-2.48-unix-x86/usr/share/common-lisp/source/cl-ppcre/api.fas 
/u/home/.cache/common-lisp/clisp-2.48-unix-x86/usr/share/common-lisp/source/cl-ppcre/charmap.fas 
/u/home/.cache/common-lisp/clisp-2.48-unix-x86/usr/share/common-lisp/source/cl-ppcre/charset.fas 
/u/home/.cache/common-lisp/clisp-2.48-unix-x86/usr/share/common-lisp/source/cl-ppcre/chartest.fas 
/u/home/.cache/common-lisp/clisp-2.48-unix-x86/usr/share/common-lisp/source/cl-ppcre/closures.fas 
/u/home/.cache/common-lisp/clisp-2.48-unix-x86/usr/share/common-lisp/source/cl-ppcre/convert.fas 
/u/home/.cache/common-lisp/clisp-2.48-unix-x86/usr/share/common-lisp/source/cl-ppcre/errors.fas 
/u/home/.cache/common-lisp/clisp-2.48-unix-x86/usr/share/common-lisp/source/cl-ppcre/lexer.fas 
/u/home/.cache/common-lisp/clisp-2.48-unix-x86/usr/share/common-lisp/source/cl-ppcre/optimize.fas 
/u/home/.cache/common-lisp/clisp-2.48-unix-x86/usr/share/common-lisp/source/cl-ppcre/packages.fas 
/u/home/.cache/common-lisp/clisp-2.48-unix-x86/usr/share/common-lisp/source/cl-ppcre/parser.fas 
/u/home/.cache/common-lisp/clisp-2.48-unix-x86/usr/share/common-lisp/source/cl-ppcre/regex-class-util.fas 
/u/home/.cache/common-lisp/clisp-2.48-unix-x86/usr/share/common-lisp/source/cl-ppcre/regex-class.fas 
/u/home/.cache/common-lisp/clisp-2.48-unix-x86/usr/share/common-lisp/source/cl-ppcre/repetition-closures.fas 
/u/home/.cache/common-lisp/clisp-2.48-unix-x86/usr/share/common-lisp/source/cl-ppcre/scanner.fas 
/u/home/.cache/common-lisp/clisp-2.48-unix-x86/usr/share/common-lisp/source/cl-ppcre/specials.fas 
/u/home/.cache/common-lisp/clisp-2.48-unix-x86/usr/share/common-lisp/source/cl-ppcre/util.fas 
/u/home/clisp/ercpp/compiling-program/cl-ppcre-test.asd 
/usr/share/common-lisp/source/aima/cl-ppcre-test.asd 
/usr/share/common-lisp/source/alexandria/cl-ppcre-test.asd 
/usr/share/common-lisp/source/arnesi/cl-ppcre-test.asd 
/usr/share/common-lisp/source/arnesi/src/cl-ppcre-extras.lisp 
/usr/share/common-lisp/source/aspectl/cl-ppcre-test.asd 
/usr/share/common-lisp/source/babel/cl-ppcre-test.asd 
/usr/share/common-lisp/source/binary-types/cl-ppcre-test.asd 
/usr/share/common-lisp/source/blowfish/cl-ppcre-test.asd 
/usr/share/common-lisp/source/cedilla/cl-ppcre-test.asd 
/usr/share/common-lisp/source/cl-acl-compat/cl-ppcre-test.asd 
/usr/share/common-lisp/source/cl-asdf/cl-ppcre-test.asd 
/usr/share/common-lisp/source/cl-cffi/cl-ppcre-test.asd 
/usr/share/common-lisp/source/cl-fad/cl-ppcre-test.asd 
/usr/share/common-lisp/source/cl-interpol/cl-ppcre-test.asd 
/usr/share/common-lisp/source/cl-jpeg/cl-ppcre-test.asd 
/usr/share/common-lisp/source/cl-launch/cl-ppcre-test.asd 
/usr/share/common-lisp/source/cl-menusystem/cl-ppcre-test.asd 
/usr/share/common-lisp/source/cl-pdf/cl-ppcre-test.asd 
/usr/share/common-lisp/source/cl-photo/cl-ppcre-test.asd 
/usr/share/common-lisp/source/cl-plplot/cl-ppcre-test.asd 
/usr/share/common-lisp/source/cl-port/cl-ppcre-test.asd 
/usr/share/common-lisp/source/cl-ppcre 
/usr/share/common-lisp/source/cl-ppcre/. 
/usr/share/common-lisp/source/cl-ppcre/api.fas 
/usr/share/common-lisp/source/cl-ppcre/api.lisp 
/usr/share/common-lisp/source/cl-ppcre/charmap.fas 
/usr/share/common-lisp/source/cl-ppcre/charmap.lisp 
/usr/share/common-lisp/source/cl-ppcre/charset.fas 
/usr/share/common-lisp/source/cl-ppcre/charset.lisp 
/usr/share/common-lisp/source/cl-ppcre/chartest.fas 
/usr/share/common-lisp/source/cl-ppcre/chartest.lisp 
/usr/share/common-lisp/source/cl-ppcre/cl-ppcre-test.asd 
/usr/share/common-lisp/source/cl-ppcre/cl-ppcre-unicode.asd 
/usr/share/common-lisp/source/cl-ppcre/cl-ppcre.asd 
/usr/share/common-lisp/source/cl-ppcre/closures.fas 
/usr/share/common-lisp/source/cl-ppcre/closures.lisp 
/usr/share/common-lisp/source/cl-ppcre/convert.fas 
/usr/share/common-lisp/source/cl-ppcre/convert.lisp 
/usr/share/common-lisp/source/cl-ppcre/errors.fas 
/usr/share/common-lisp/source/cl-ppcre/errors.lisp 
/usr/share/common-lisp/source/cl-ppcre/lexer.fas 
/usr/share/common-lisp/source/cl-ppcre/lexer.lisp 
/usr/share/common-lisp/source/cl-ppcre/optimize.fas 
/usr/share/common-lisp/source/cl-ppcre/optimize.lisp 
/usr/share/common-lisp/source/cl-ppcre/packages.fas 
/usr/share/common-lisp/source/cl-ppcre/packages.lisp 
/usr/share/common-lisp/source/cl-ppcre/parser.fas 
/usr/share/common-lisp/source/cl-ppcre/parser.lisp 
/usr/share/common-lisp/source/cl-ppcre/regex-class-util.fas 
/usr/share/common-lisp/source/cl-ppcre/regex-class-util.lisp 
/usr/share/common-lisp/source/cl-ppcre/regex-class.fas 
/usr/share/common-lisp/source/cl-ppcre/regex-class.lisp 
/usr/share/common-lisp/source/cl-ppcre/repetition-closures.fas 
/usr/share/common-lisp/source/cl-ppcre/repetition-closures.lisp 
/usr/share/common-lisp/source/cl-ppcre/scanner.fas 
/usr/share/common-lisp/source/cl-ppcre/scanner.lisp 
/usr/share/common-lisp/source/cl-ppcre/specials.fas 
/usr/share/common-lisp/source/cl-ppcre/specials.lisp 
/usr/share/common-lisp/source/cl-ppcre/util.fas 
/usr/share/common-lisp/source/cl-ppcre/util.lisp 
/usr/share/common-lisp/source/cl-salza/cl-ppcre-test.asd 
/usr/share/common-lisp/source/cl-split-sequence/cl-ppcre-test.asd 
/usr/share/common-lisp/source/cl-statistics/cl-ppcre-test.asd 
/usr/share/common-lisp/source/cl-utilities/cl-ppcre-test.asd 
/usr/share/common-lisp/source/cl-who/cl-ppcre-test.asd 
/usr/share/common-lisp/source/closer-mop/cl-ppcre-test.asd 
/usr/share/common-lisp/source/contextl/cl-ppcre-test.asd 
/usr/share/common-lisp/source/csv/cl-ppcre-test.asd 
/usr/share/common-lisp/source/fiveam/cl-ppcre-test.asd 
/usr/share/common-lisp/source/ftp/cl-ppcre-test.asd 
/usr/share/common-lisp/source/getopt/cl-ppcre-test.asd 
/usr/share/common-lisp/source/infix/cl-ppcre-test.asd 
/usr/share/common-lisp/source/inflate/cl-ppcre-test.asd 
/usr/share/common-lisp/source/ironclad/cl-ppcre-test.asd 
/usr/share/common-lisp/source/iterate/cl-ppcre-test.asd 
/usr/share/common-lisp/source/kmrcl-tests/cl-ppcre-test.asd 
/usr/share/common-lisp/source/kmrcl/cl-ppcre-test.asd 
/usr/share/common-lisp/source/lexer/cl-ppcre-test.asd 
/usr/share/common-lisp/source/lw-compat/cl-ppcre-test.asd 
/usr/share/common-lisp/source/md5/cl-ppcre-test.asd 
/usr/share/common-lisp/source/metering/cl-ppcre-test.asd 
/usr/share/common-lisp/source/net-telent-date/cl-ppcre-test.asd 
/usr/share/common-lisp/source/onlisp/cl-ppcre-test.asd 
/usr/share/common-lisp/source/pipes/cl-ppcre-test.asd 
/usr/share/common-lisp/source/png/cl-ppcre-test.asd 
/usr/share/common-lisp/source/ptester/cl-ppcre-test.asd 
/usr/share/common-lisp/source/puri/cl-ppcre-test.asd 
/usr/share/common-lisp/source/qbook/cl-ppcre-test.asd 
/usr/share/common-lisp/source/readline/cl-ppcre-test.asd 
/usr/share/common-lisp/source/regex/cl-ppcre-test.asd 
/usr/share/common-lisp/source/reversi/cl-ppcre-test.asd 
/usr/share/common-lisp/source/rsm-bitcomp/cl-ppcre-test.asd 
/usr/share/common-lisp/source/rsm-bool-comp/cl-ppcre-test.asd 
/usr/share/common-lisp/source/rsm-cache/cl-ppcre-test.asd 
/usr/share/common-lisp/source/rsm-delayed/cl-ppcre-test.asd 
/usr/share/common-lisp/source/rsm-filter/cl-ppcre-test.asd 
/usr/share/common-lisp/source/rsm-fuzzy/cl-ppcre-test.asd 
/usr/share/common-lisp/source/rsm-mod/cl-ppcre-test.asd 
/usr/share/common-lisp/source/rsm-modal/cl-ppcre-test.asd 
/usr/share/common-lisp/source/rsm-queue/cl-ppcre-test.asd 
/usr/share/common-lisp/source/rsm-rand/cl-ppcre-test.asd 
/usr/share/common-lisp/source/rsm-random/cl-ppcre-test.asd 
/usr/share/common-lisp/source/rsm-rsa/cl-ppcre-test.asd 
/usr/share/common-lisp/source/rsm-string/cl-ppcre-test.asd 
/usr/share/common-lisp/source/rt/cl-ppcre-test.asd 
/usr/share/common-lisp/source/series/cl-ppcre-test.asd 
/usr/share/common-lisp/source/slime/cl-ppcre-test.asd 
/usr/share/common-lisp/source/trivial-features/cl-ppcre-test.asd 
/usr/share/common-lisp/source/uffi-tests/cl-ppcre-test.asd 
/usr/share/common-lisp/source/uffi/cl-ppcre-test.asd 
/usr/share/common-lisp/source/units/cl-ppcre-test.asd 
/usr/share/common-lisp/source/url-rewrite/cl-ppcre-test.asd 
/usr/share/common-lisp/source/usocket/cl-ppcre-test.asd 
/usr/share/common-lisp/source/usocket/test/cl-ppcre-test.asd 
/usr/share/common-lisp/source/yacc/cl-ppcre-test.asd 
/usr/share/common-lisp/source/yaclml/cl-ppcre-test.asd 
/usr/share/common-lisp/systems/cl-ppcre-test.asd 
/usr/share/common-lisp/systems/cl-ppcre.asd 

Vì vậy, tôi phải làm gì?

Trả lời

11

Nếu bạn biên dịch một số tệp sử dụng gói như (cl-ppcre:bar ...) thì bạn cần đảm bảo rằng gói tồn tại.

Soạn một câu lệnh như (asdf:load-system :cl-ppcre) không gây tải hệ thống tại thời gian biên dịch. Do đó định nghĩa gói cũng không được nạp và thực thi. Trình biên dịch tạo mã cho câu lệnh này, do đó nó chỉ thực thi tại thời gian tải.

Hoặc bạn tải hệ thống một cách nào đó trước khi bạn biên dịch các tập tin hoặc bạn sử dụng

(eval-when (:compile-toplevel :load-toplevel :execute) 
    (asdf:load-system :cl-ppcre)) 

trong tập tin để chắc chắn rằng nó được nạp vào môi trường thời gian biên dịch.