2009-05-07 40 views
24

Cho một chương trình đơn giản như sau, làm thế nào bạn sẽ:Binaries Biên soạn với Clozure Common Lisp

  1. biên dịch nó như là một file ảnh riêng biệt được nạp bởi việc thực hiện, và những gì đối số dòng lệnh sẽ bạn sử dụng để tải nó?

  2. Biên dịch dưới dạng nhị phân độc lập có thể được tải và chạy như cũ.

    Lưu ý: Tôi đã thử thêm ": prepend-kernel t" khi lưu ứng dụng chỉ để phát hiện lỗi sau.

    Error: value NIL is not of the 
    expected type REAL. While executing: 
    CCL::<-2, in process Initial(0). 
    
  3. Làm thế nào bạn sẽ ngăn chặn các thông điệp chào mừng?

    Chương trình

    (defun main() 
        (format t "This is the program.")0) 
    

Sửa

Hate để trả lời một phần của câu hỏi của riêng tôi, nhưng tôi thấy nó không ít.

Sau khi chức năng đã được tải loại sau để biên dịch nó:

(ccl:save-application "app") 

Điều này tạo ra một tập tin hình ảnh. Để tải nó bằng cách chuyển nó đến kiểu triển khai (lưu ý: nhị phân 'ccl' nằm trong đường dẫn hệ thống của tôi);

ccl -I app 

Để chạy một chức năng cấp cao nhất vượt qua nó như một tham số

ccl -I app --eval (main) 

Trả lời

28

Xem tài liệu Clozure Common Lisp dưới Saving Applications

Biên soạn và tải file Lisp

Bạn có thể biên soạn một tệp có tên là /foo/bar.lisp bằng cách gọi

(compile-file "/foo/bar.lisp") 

Điều này sẽ tạo một tệp fasl (FASt Load), chứa mã gốc.

Bạn có thể tải tệp được biên dịch, tệp fasl, với hàm LOAD. LOADCOMPILE-FILE là các chức năng thông thường của Môi.

Tạo ứng dụng

Một vài định nghĩa:

  • CCL kernel: một phần của CCL cung cấp dịch vụ runtimes ở mức độ thấp như quản lý bộ nhớ.
  • ảnh: một bãi chứa lưu của heap Lisp
  • Application: CCL kernel + hình ảnh. Điều này có thể ở trong một tệp.

Bạn có thể tiết kiệm một ứng dụng bằng cách gọi một chức năng cụ thể CCL:

(save-application "/foo/bar-image" :toplevel-function #'main) 

này sẽ tiết kiệm được một hình ảnh, bạn có thể chạy bằng hạt nhân CCL từ một lệnh shell:

ccl -I /foo/bar-image 

Để lưu tệp thực thi bao gồm hạt nhân sử dụng điều này từ Lisp:

(save-application "/foo/bar-app" :toplevel-function #'main :prepend-kernel t) 

Bạn có thể gọi tệp thực thi này như bình thường với /foo/bar-app từ trình bao lệnh.

Trong Clozure Common Lisp bạn có thể kiểm tra

*command-line-argument-list* 

cho danh sách được cung cấp đối số dòng lệnh.

+0

Sửa lỗi. Ngoài ra, ứng dụng đã được tạo như mong đợi, nhưng khi tôi cố tải exe, một thông báo lỗi cho tôi biết rằng "Chương trình quá lớn để vừa trong bộ nhớ". Bạn đã gặp phải điều này trước đây chưa? Biết một sửa chữa? – BlueBadger

+0

xem chỉnh sửa của tôi, sử dụng prepend-hạt nhân để thêm hạt nhân vào tập tin –

+0

Tôi đã thử nghiệm tất cả điều này trên Windows của họ thực hiện và nhận được các lỗi khác nhau được đề cập. Tôi vừa thử nghiệm nó trên một máy Linux và tất cả đều hoạt động như mong đợi. Cảm ơn. – BlueBadger