2014-12-18 16 views
5

Voglio compilare il mio progetto OCaml in un eseguibile che può essere eseguito in altri computer su cui non è installato OCaml. Usando ocamlbuild, quando compilo un file ".native" funziona bene su altre macchine ma se compilo un file ".byte" fallisce con un messaggio Cannot exec ocamlrun quando provo a eseguire l'eseguibile.Come si compila il mio codice OCaml in un eseguibile bytecode standalone?

Poiché la versione bytecode del mio programma è significativamente più piccola in termini di dimensioni del file, preferirei distribuirla al posto del codice nativo. C'è un modo per raggruppare ocamlrun nell'eseguibile quando lo compilo?

+1

Direi che se si raggruppa ocamlrun con il proprio bytecode, la dimensione del programma sarà paragonabile o superiore alla versione nativa. Ho ragione? –

+0

@AnthonyScemama: sì, questo è quello che è successo:/ – hugomg

risposta

7

è necessario compilare in una modalità personalizzata, da utente ocamlc manual:

-custom

Link in modalità “runtime personalizzato”. Nella modalità di collegamento predefinita, il linker produce il bytecode che deve essere eseguito con il sistema di runtime condiviso ocamlrun. Nella modalità runtime personalizzata, il linker produce un file di output che contiene sia il sistema di runtime sia il bytecode per il programma. Il file risultante è più grande, ma è possibile eseguire direttamente , anche se il comando ocamlrun non è installato. Inoltre, la modalità "runtime personalizzato" attiva il collegamento statico di codice OCaml con funzioni C definite dall'utente, come descritto nel capitolo

Unix: non utilizzare mai il comando strip sugli eseguibili prodotti da ocamlc -custom, questo eliminerebbe il bytecode parte dell'eseguibile.

Se stai usando oasis allora tutto ciò che è necessario è quello di aggiungere Custom : true campo alla sezione eseguibile, in modo simile, per ocamlbuild, aggiungere -tag custom o mettere personalizzato in _tags.

+3

allo stesso modo, per ocamlbuild, aggiungi '-tag custom' o aggiungi personalizzato in' _tags' – unhammer

+0

grazie per la nota, e non aver paura di modificare la risposta, SO è uno strumento di collaborazione. – ivg

Problemi correlati