Exécutables autonomes
Un exécutable autonome (standalone) est un exécutable
indépendant de l'installation d'Objective CAML sur la machine
utilisée. D'une part, cela facilite la diffusion d'une application
sous forme binaire. D'autre part si l'on installe une nouvelle version
d'Objective CAML à un emplacement différent, cet exécutable continuera à
fonctionner.
Le compilateur natif produit automatiquement des exécutables
autonomes. En revanche, sans l'option -custom, le compilateur de
code-octet produit un exécutable qui a besoin de l'interprète
ocamlrun. Soit le fichier exemple.ml suivant :
let f x = x + 1;;
print_int (f 18);;
print_newline();;
La commande suivante produit le fichier exemple.exe :
ocamlc -o exemple.exe t.ml
Ce fichier d'une taille de 8ko peut être exécuté en le passant comme
paramètre à l'interprète de code-octet :
$ ocamlrun exemple.exe
19
L'interprète exécute les instructions de la machine Zinc contenues
dans le fichier exemple.exe et utilise le chemin d'accès standard aux
bibliothèques.
Sous Unix, la première ligne du fichier exemple.exe contient la
localisation de l'interprète de code-octet, par exemple :
#!/usr/local/bin/ocamlrun
Cette indication permet de lancer directement l'exécution du fichier
exemple.exe par l'interprète de commandes.
Son exécution lance la commande décrite
par cette première ligne. Il faut donc bien trouver la commande
ocamlrun à l'emplacement indiqué, sinon le message d'erreur
Command not found apparaîtra et l'exécution sera arrêtée.
La même compilation avec l'option -custom produit un exécutable
autonome de nom exauto.exe :
ocamlc -custom -o exaauto.exe t.ml
Sa taille est d'environ 85Ko car il contient, outre le code-octet du
programme, l'interprète de ce code-octet. Ce fichier peut être
exécuté directement ou copié sur une autre machine (de même
architecture et de même système) pour être exécuté.
Warning
La taille du fichier d'un exécutable ne correspond pas à la taille
du processus de son exécution. En effet le fichier ne tient pas
compte de l'allocation dynamique de mémoire du programme
(9).