J'essaie de créer un exécutable ocaml simple avec une fonction native.ocamlopt redéfinir les arguments par défaut passés à l'éditeur de liens
Voici le code ocaml minimal.ml
... il définit une fonction externe qui prend deux ints et retourne un int.
external add: int -> int -> int = "add";;
Printf.printf "%d\n" (add 4 7);;
Et voici le code c minimal.c
#define CAML_NAME_SPACE
#include <caml/mlvalues.h>
CAMLprim value
add(value x, value y)
{
int x1;
int y1;
int z;
x1 = Int_val(x);
y1 = Int_val(y);
z = x1 + y1;
return Val_int(z);
}
ocamlopt minimal.ml minimal.c
génère des erreurs de l'éditeur de liens, mais d'une manière vraiment surpriging. Il se plaint des symboles qui semblent faire partie de l'environnement d'exécution natif OCaml, et ne se plaint pas de _add
.
Comment indiquer ocamlopt
les arguments à fournir à l'éditeur de liens?
$ ocamlopt minimal.ml minimal.c
Undefined symbols for architecture x86_64:
"_camlMinimal", referenced from:
_caml_globals in camlstartupf80fc9.o
"_camlMinimal__code_begin", referenced from:
_caml_code_segments in camlstartupf80fc9.o
"_camlMinimal__code_end", referenced from:
_caml_code_segments in camlstartupf80fc9.o
"_camlMinimal__data_begin", referenced from:
_caml_data_segments in camlstartupf80fc9.o
"_camlMinimal__data_end", referenced from:
_caml_data_segments in camlstartupf80fc9.o
"_camlMinimal__entry", referenced from:
.L115 in camlstartupf80fc9.o
"_camlMinimal__frametable", referenced from:
_caml_frametable in camlstartupf80fc9.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
File "caml_startup", line 1:
Error: Error during linking
Exit 2
Il n'y a rien comme un "C linker". – Olaf
@Olaf fixé. La documentation du compilateur OCaml mentionne la liaison dans le contexte des programmes pure-ocaml et dans ces cas je pense que ld/gold ne sont pas impliqués ... Quelle est la description correcte du type de chose que ld et gold sont? –
Qu'est-ce qui ne va pas avec "linker"? – Olaf