Author: Christian.Queinnec@lip6.fr

## Programme principal en C

Jusqu'à maintenant le point d'entrée du programme était en Objective CAML. Rien n'empêche de le faire démarrer en C. Pour cela il faudra définir, dans le programme C, la fonction `main` habituelle. Elle initialisera le runtime d'Objective CAML par la fonction `caml_main(char **)` qui prend en argument le tableau d'arguments correspondant à la valeur du tableau `Sys.argv` d'Objective CAML. Le contrôle peut être passé à ce dernier en utilisant un `callback` (voir page ??).

### Inclure du code Objective CAML en C

Le compilateur Objective CAML permet d'engendrer des fichiers objets C (fichiers avec l'extension '.o') en lieu et place des fichiers objets Objective CAML (d'extension '.cmo' ou '.cmx'). Il suffit d'utiliser l'option `-output-obj` du compilateur et d'ajouter la bibliothèque `unix.cma`.

    ocamlc -output-obj unix.cma fichiers.ml
    ocamlopt -output-obj unix.cmxa fichiers.ml

À partir des fichiers sources en Objective CAML `fichiers.ml`, le fichier objet portant par défaut le nom `camlprog.o` est engendré.
Un exécutable est obtenu en effectuant l'édition de liens avec un compilateur C en ajoutant la bibliothèque `libcamlrun.a` pour un programme compilé en code-octet ou la bibliothèque `libasmrun.a` pour la compilation en code natif.

    cc camlprog.o fichiersC.o -lcamlrun
    cc camlprog.o fichiersC.o -lasmrun

L'invocation d'une fonction Objective CAML depuis le programme C se fait comme décrit précédemment par les fonctions `callback`. La seule différence est que l'initialisation et le lancement du runtime d'Objective CAML se fait par la fonction `caml_startup` à la place de `caml_main`.