2012-03-19 9 views
5

Sto provando a creare un eseguibile nella racchetta che è collegato dinamicamente. Attualmente il mio programma Hello Hello è compilato per 4MB eseguibile. Eccolo:Come posso creare un eseguibile collegato in modo dinamico in Racket?

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

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

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

ho compilarlo usando

Raco exe first.rkt

e l'eseguibile risultante è 4+ MB. Quindi, chiaramente, sta collegando staticamente le librerie della racchetta.

- EDIT ---

Ecco il codice di programma di avvio:

#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" 
         '()) 

Ha solo bisogno di mettere in un file separato ed eseguito con

racket <launch-file>.rkt 

risposta

7

L'uscita del raco exe intende staticamente includere i suoi moduli richiesti, quindi non può essere ciò che si desidera. Hai esaminato la libreria launcher? Farà un exe che include nient'altro che il minimo assoluto per avviare il tuo programma sull'installazione locale.

In alternativa, scegliere una lingua più piccola, ad esempio #lang racket/base, che dovrebbe produrre file eseguibili più piccoli poiché non si collega a tutti i moduli.

Infine, se si è su un sistema basato su Unix, il programma dovrebbe già funzionare come un eseguibile se il suo bit eseguibile (x) è stato impostato, poiché è già stata aggiunta la linea rack #!/usr/bin/env nella parte superiore. Questo presuppone che il tuo rack sia in PATH. Vedi http://docs.racket-lang.org/guide/scripts.html

+0

grazie. Ha funzionato!! :) – Salil

Problemi correlati