J'essaye de trouver comment utiliser ocamlfind
pour compiler une bibliothèque C et un exécutable OCaml en utilisant cette bibliothèque C.Compilation C lib et OCaml exe l'utilisant, tout en utilisant ocamlfind
J'ai mis en place un ensemble de fichiers d'exemple plutôt stupides.
% cat sillystubs.c
#include <stdio.h>
#include <caml/mlvalues.h>
#include <caml/memory.h>
#include <caml/alloc.h>
#include <caml/custom.h>
value
caml_silly_silly(value unit)
{
CAMLparam1(unit);
printf("%s\n", __FILE__);
CAMLreturn(Val_unit);
}
% cat silly.mli
external silly : unit -> unit = "silly_silly"
% cat foo.ml
open Silly
open String
let _ =
print_string "About to call into silly";
silly();
print_string "Called into silly"
Je crois que ce qui suit est la façon de compiler la bibliothèque:
% ocamlfind ocamlc -c sillystubs.c
% ar rc libsillystubs.a sillystubs.o
% ocamlfind ocamlc -c silly.mli
% ocamlfind ocamlc -a -o silly.cma -ccopt -L${PWD} -cclib -lsillystubs
Maintenant, je ne semble pas être en mesure d'utiliser la bibliothèque créée si:
% ocamlfind ocamlc -custom -o foo foo.cmo silly.cma
/usr/bin/ld: cannot find -lsillystubs
collect2: ld returned 1 exit status
File "_none_", line 1, characters 0-1:
Error: Error while building custom runtime system
Les outils OCaml sont quelque peu mystérieux pour moi, donc les pointeurs seraient les bienvenus.
Pour que les utilisateurs puissent facilement copier-coller, corrigez une erreur en écrivant ocamlc comme ocmalc. –