2012-03-19 34 views
5

Tôi đang cố tạo một tệp thi hành trong vợt được liên kết động. Hiện tại chương trình hello world của tôi biên dịch thành 4MB thực thi. Ở đây là:Làm cách nào để tạo tập tin thực thi được liên kết động trong Racket?

#!/usr/bin/env racket 
#lang racket 

(define (extract str) 
    (substring str 4 7)) 

(print (extract "the cat out of the bag")) 

tôi biên dịch nó bằng cách sử

Raco exe first.rkt

Và thực thi kết quả là 4+ MB. Vì vậy, rõ ràng, nó là tĩnh liên kết các thư viện vợt.

- EDIT ---

Đây là mã launcher:

#lang racket 

(require launcher/launcher) 
(require racket/runtime-path) 

(define-runtime-path prog-path "first.rkt") 

(make-racket-launcher (list (path->string prog-path)) 
         "first" 
         '()) 

Nó chỉ cần đặt trong một file riêng biệt và thực hiện với

racket <launch-file>.rkt 

Trả lời

7

Kết quả của raco exe có nghĩa là để tĩnh bao gồm các module cần thiết của nó, vì vậy nó có thể không được những gì bạn muốn. Bạn đã xem thư viện launcher chưa? Nó sẽ tạo một exe bao gồm không có gì ngoài mức tối thiểu tuyệt đối để khởi chạy chương trình của bạn trên bản cài đặt cục bộ của bạn.

Hoặc, chọn ngôn ngữ nhỏ hơn, như #lang racket/base, sẽ tạo ra các tệp thực thi nhỏ hơn vì nó không liên kết với nhiều mô-đun.

Cuối cùng, nếu bạn đang sử dụng hệ thống dựa trên Unix, chương trình sẽ hoạt động như một tệp thực thi nếu bit thực thi (x) của nó đã được thiết lập, vì bạn đã thêm dòng vợt #!/usr/bin/env ở trên cùng. Điều này giả định rằng Racket của bạn là trong PATH. Xem http://docs.racket-lang.org/guide/scripts.html

+0

cảm ơn. Nó đã làm việc!! :) – Salil

Các vấn đề liên quan