Author: Christian.Queinnec@lip6.fr

## 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).