IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Caml Discussion :

[Ocaml]Problème de compilation


Sujet :

Caml

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mars 2007
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 42
    Points : 39
    Points
    39
    Par défaut [Ocaml]Problème de compilation
    Bonjour,

    j'ai un léger problème pour compiler mon programme...
    Je suis sous Ubuntu Edgy Eft, avec ocaml et lablgl installé.

    J'ai 3 fichiers, Mesh.ml, World.ml, et Polished.ml. Le premier et le second sont des modules (avec leurs signatures), le dernier est une suite de code. Le troisième utilise des fonctions du second, lui même utilisant des types et des fonctions du premier. Et tous utilisent Lablgl.

    Pour compiler, je tape la commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ocamlc -I +Lablgl lablgl.cma Mesh.ml
    ocamlc -I +Lablgl lablgl.cma World.ml
    ocamlc -I +Lablgl lablgl.cma Polished.ml
    La compilation marche, mais je n'ai pas d'éxécutable ??
    Je suis relativement débutant dans Ocaml, disons que je maitrise plus le code que la compilation. En l'occurence, je découvre la programmation modulaire, mais c'est un véritable enfer pour pouvoir aboutir à une compilation...

    Merci !

  2. #2
    Membre éprouvé
    Avatar de InOCamlWeTrust
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 036
    Points : 1 284
    Points
    1 284
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ocamlc -c -I +Lablgl lablgl.cma mesh.ml
    ocamlc -c -I +Lablgl lablgl.cma world.ml
    ocamlc -o polished -I +Lablgl lablgl.cma mesh.cmo world.cmo polished.ml
    polished est un fichier byte-code nécessitant la machine virtuelle : elle automatiquement lancée lorsque tu entres la commande "./polished".

    Les noms des fichiers doivent commencer par une minuscule, et le nom des modules par une majuscule.

    Si tu veux avoir un vrai exécutable, il y a deux façons.

    La première produit un exécutable intégrant déjà la machine virtuelle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ocamlc -c -I +Lablgl lablgl.cma mesh.ml
    ocamlc -c -I +Lablgl lablgl.cma world.ml
    ocamlc -custom -o polished -I +Lablgl lablgl.cma mesh.cmo world.cmo polished.ml
    La deuxième compile directement en natif les fichiers et l'exécutable est bien plus performant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ocamlopt -c -I +Lablgl lablgl.cmxa mesh.ml
    ocamlopt -c -I +Lablgl lablgl.cmxa world.ml
    ocamlopt -o polished -I +Lablgl lablgl.cmxa mesh.cmx world.cmx polished.ml

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mars 2007
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 42
    Points : 39
    Points
    39
    Par défaut
    Merci beaucoup pour ces précisions, ça fonctionne maintenant.

  4. #4
    Membre éprouvé
    Avatar de InOCamlWeTrust
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 036
    Points : 1 284
    Points
    1 284
    Par défaut
    J'ai oublié une chose importante : si tu as écrit des fichiers interface .mli pour tes modules, n'oublie pas de les compiler avant chaque module, par exemple...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ocamlc -c -I +Lablgl mesh.mli
    ocamlc -c -I +Lablgl mesh.ml
    ... et ainsi de suite.

    Tu as ici un exemple de Makefile utilisable pour n'importe quel projet relativement simple Objective Caml.

    http://caml.inria.fr/pub/docs/manual...manual027.html

    ocamldep, c'est vraiment bien !

  5. #5
    Nouveau membre du Club
    Inscrit en
    Mars 2007
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 42
    Points : 39
    Points
    39
    Par défaut
    J'écris directement les signatures de mes modules dans les fichiers mêmes, et non pas dans des .mli.

    J'ai déjà essayé de compiler avec des .mli séparés, mais ça ne marche pas : Ocaml râle parce qu'il trouve pas la signature correspondante. Bien que je l'ai compilé avant via ocamlc -c...

  6. #6
    Membre éprouvé
    Avatar de InOCamlWeTrust
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 036
    Points : 1 284
    Points
    1 284
    Par défaut
    Il faut ajouter également l'option -I lors de l'invocation du compilateur.

    Par contre, qu'est-ce que tu entends par "mettre directement la signature des modules dans les fichiers" ? Peux-tu donner un exemple ?

  7. #7
    Nouveau membre du Club
    Inscrit en
    Mars 2007
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 42
    Points : 39
    Points
    39
    Par défaut
    Mieux vaut un exemple qu'un long discours ^^.
    Voici mon fichier Camera.ml

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    module type CAMERA=
    sig
    val refresh_player_pos : Gl.vect3->unit
    val set : unit->unit
    end
     
    module Camera:CAMERA=
    struct 
     
    let eye_pos = ref (-150.,-150.,150.)
    let center_pos = ref (0.,0.,0.)
    let up_pos = ref (1.,1.,1.)
     
    let refresh_player_pos vect= let (x,y,z)=vect in eye_pos:=(x-.150.,y-.150.,z+.150.); center_pos:=(x,y,z)
     
    let set () = GluMat.look_at ~eye:!eye_pos ~center:!center_pos ~up:!up_pos 
     
    end
    Je mets d'abord la signature, ensuite l'implémantation, sans passer par un fichier .mli.

  8. #8
    Membre éprouvé
    Avatar de InOCamlWeTrust
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 036
    Points : 1 284
    Points
    1 284
    Par défaut
    Tu définis là un module contenant un autre module. Les modules sont hierarchisé en Objective Caml. Pourquoi ne pas essayer ceci :

    Fichier : camera.mli

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    val refresh_player_pos : Gl.vect3->unit
    val set : unit->unit
    Fichier : camera.ml

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    let eye_pos = ref (-150.,-150.,150.)
    let center_pos = ref (0.,0.,0.)
    let up_pos = ref (1.,1.,1.)
     
    let refresh_player_pos vect= let (x,y,z)=vect in eye_pos:=(x-.150.,y-.150.,z+.150.); center_pos:=(x,y,z)
     
    let set () = GluMat.look_at ~eye:!eye_pos ~center:!center_pos ~up:!up_pos
    Pour compiler :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ocamlc -c -I DOSSIER_QUI_VA_BIEN_1 -I DOSSIER_QUI_VA_BIEN_2 ... camera.mli
    ocamlc -c -I DOSSIER_QUI_VA_BIEN_1 -I DOSSIER_QUI_VA_BIEN_2 ... camera.ml
    Tu devrais alors avoir un fichier camera.cmi et un autre camera.cmo.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [OCamL]problème de compilation
    Par leaf blade dans le forum Caml
    Réponses: 4
    Dernier message: 12/01/2010, 16h40
  2. [OCaml] Problème de compilation
    Par HanLee dans le forum Caml
    Réponses: 13
    Dernier message: 01/09/2009, 11h03
  3. Réponses: 4
    Dernier message: 31/08/2009, 20h26
  4. Problème de compilation de la DLL du XMLRad
    Par [DreaMs] dans le forum XMLRAD
    Réponses: 2
    Dernier message: 16/04/2003, 17h46
  5. Réponses: 1
    Dernier message: 27/05/2002, 02h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo