Indépendant des modules OCaml
Mon problème est que ocamlc et ocamlopt apparaissent à refusant de trouver des bibliothèques tierces installé par apt-get. J'ai d'abord commencé à avoir ce problème quand j'ai essayé d'incorporer des modules tiers dans mes propres programmes OCaml, et rapidement il a écrit un personnel défaut dans la compréhension de OCaml compilation. Bientôt---- cependant, j'ai trouvé moi-même en cours d'exécution dans le même problème lorsque vous essayez de compiler les autres peuples de projets en vertu de leurs propres instructions.
Ici est la plus straight-forward exemple. Les autres utilisent tous ocamlbuild, qui dissimule les choses un peu.
Le programme: http://groups.google.com/group/fa.caml/msg/5aee553df34548e2
La compilation:
$ocamlc -g -dtypes -pp camlp4oof -I +camlp4 dynlink.cma camlp4lib.cma -cc g++ llvm.cma llvm_bitwriter.cma minml.ml -o minml
File "minml.ml", line 43, characters 0-9:
Error:Unbound module Llvm
Même quand je fournir ocamlc avec le obsolute chemins d'accès à la version des fichiers, comme si...
$ ocamlc -g -dtypes -pp camlp4oof -I +camlp4 dynlink.cma camlp4lib.cma -cc g++ /usr/lib/ocaml/llvm-2.7/llvm.cma /usr/lib/ocaml/llvm-2.7/llvm_bitwriter.cma minml.ml -o minml
... en vain.
Ce que je fais mal?
Vous devez vous connecter pour publier un commentaire.
Votre commande est en train de faire deux choses: c'est la compilation de
minml.ml
(enminml.cmo
), puis de la liaison de l'objet résultant enminml
.La compilation d'un module nécessite la interfaces des dépendances. Les interfaces contiennent des informations de typage qui est nécessaire à la fois le type checker et le générateur de code; cette information n'est pas reprise dans la mise en œuvre (
.cma
ici). Ainsi, pour la phase de compilation,llvm.cmi
doit être disponible. Le compilateur cherche dans le chemin d'inclusion, de sorte que vous besoin d'un supplément de-I +llvm-2.7
(qui est court pour-I /usr/lib/ocaml/llvm-2.7
).L'étape de lien nécessite
llvm.cma
, qui contient le bytecode de la mise en œuvre du module. Ici, vous pouvez soit utiliser-I
ou donner un chemin d'accès complet à laisserocamlc
savoir où trouver le fichier.ou si vous voulez faire les deux étapes en une seule commande:
-I
que nécessaire. En passant, je ne suis pas sûr de savoir si-cc g++
est réellement nécessaire.