Bonsoir,
Tout d'abord je précise que j'ai une distibution Ocaml pour Windows, obtenue ici :
http://protz.github.io/ocaml-installer/
J'ai un projet à faire en OCamL et j'ai un problème avec les modules que je suis sensé utiliser.
Voici un exemple pour expliquer mon problème.
Je crée un module tout bête 'Test' qui gère les listes vides et la concaténation :
Donc j'écris le "test.mli" :
Et le "test.ml";;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 type 'a l ;; val vide : unit -> 'a l;; val cons : 'a -> 'a l ->'a l;;
Ensuite je crée les fichier "test.cmi" et "test.cmo" avec les commandes :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 type 'a l = 'a list ;; let vide() = [] ;; let cons t q = t::q ;;
Puis maintenant j'ouvre ocaml dans l'invite de commande, et c'est là que le problème intervient, si je tape :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 -> ocamlc -c test.cmi -> ocamlc -c test.cmo
J'obtiens l'erreur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 # let liste = Test.vide () ;;
Donc voilà impossible d'utiliser le module
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2"Error: Reference to undefined global 'Test'
Pour mon projet j'ai les *.cmi et les *.cmo qui définissent les modules, et j'ai la même erreur qu'avec l'exemple.
Cependant après quelque recherches, j'ai vu qu'il était possible d'utiliser un *.cma
Donc je rentre cette commande dans l'invite pour créer un *.cma :
J'obtiens bien "test.cma", je ré-ouvre caml et je rentre:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 -> ocamlc -a test.ml -o test.cma
Et cette fois ça marche tout bien j'ai :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 # #load "test.cma";; # let liste = Test.vide () ;;
Et le module marche bien pour d'autres tests...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2" val liste : 'a_ Test.l = <abstr> "
Voilà mais seulement les modules de mon projet ne comporte ni *.ml , ni *.cma donc je ne peux procéder de cette façon.
Quelqu'un a une solution pour résoudre mon problème ?
Merci d'avance
Partager