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 :

Installation de Graphics


Sujet :

Caml

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 30
    Points : 24
    Points
    24
    Par défaut Installation de Graphics
    Bonjour à tous,

    Je me remet à OCaml pour le moment et je voudrais bien bidouiller un peu du 2D avec OCaml. J'ai donc besoin du module Graphics, le soucis c'est que je suis sous Windows XP :/ (et pas moyen de changer pour le moment). J'ai réussi à installer OCaml, je l'utilise avec la console et le toplevel. Par contre, pour l'installation de Graphics, ça coince.

    Ce code là ne compile pas, il me dit: "Reference to undefined global `Graphics'" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    open Graphics;;
     
     
    Graphics.open_graph " ";;
    Graphics.set_window_title "Test !";;
    Graphics.plot 10 20;;
     
    ignore (Graphics.read_key ());;
    A vrai dire, je en trouve rien sur internet pour résoudre mon problème. Vous n'auriez pas une idée s'il vous plaît ?

    Merci d'avance,

    Zooix.

  2. #2
    Membre éprouvé
    Avatar de Cacophrene
    Homme Profil pro
    Biologiste
    Inscrit en
    Janvier 2009
    Messages
    535
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Biologiste

    Informations forums :
    Inscription : Janvier 2009
    Messages : 535
    Points : 1 125
    Points
    1 125
    Par défaut
    Salut !

    Le module Graphics ne fait pas partie de la bibliothèque standard d'OCaml. Il faut donc le charger lors du démarrage du toplevel (ocaml graphics.cma) ou utiliser la commande #load "graphics.cma";; Ci-joint un extrait de la documenation officielle :

    This library is available both for standalone compiled programs and under the toplevel application ocamlwin.exe. For the latter, this library must be loaded in-core by typing #load "graphics.cma";;
    C'est pareil pour la compilation :

    • ocamlc graphics.cma foo.ml
    • ocamlopt graphics.cmxa foo.ml

    Graphics se comporte donc comme Str, Unix, Dynlink, Num et quelques autres encore. Et, dernier point, vu qu'ils font partie de la distribution d'OCaml, on n'a pas besoin d'utiliser la fameuse commande -I (i majuscule) pour ajouter un chemin comme on le ferait pour une bibliothèque externe.

    Cordialement,
    Cacophrène

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 30
    Points : 24
    Points
    24
    Par défaut
    Merci beaucoup pour ton aide,

    mais un problème persiste: ce code-ci me renvoie une erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #load "graphics.cma";;
     
     
    Graphics.open_graph " ";;
    Graphics.set_window_title "Test !";;
    Graphics.plot 10 20;;
     
    ignore (Graphics.read_key ());;
    L'erreur: "Syntaxe error at line 1"

    Je en vois pas d'où vient cette erreur.

    Merci d'avance,

    Zooix.

  4. #4
    alex_pi
    Invité(e)
    Par défaut
    Citation Envoyé par Zooix Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #load "graphics.cma";;
    ...
    L'erreur: "Syntaxe error at line 1"
    Ce n'est à utiliser que dans le top-level ça. Dans un module à compiler, il ne faut pas le mettre mais juste ajouter les .cma ou .cmxa comme dit plus haut.

    Si tu ne veux pas t'embêter avec toutes ces options à la con, je ne saurais trop te conseiller d'utiliser ocamlbuild. Un simple ocamlbuild blah.byte se débrouillera tout seul pour linker ce qu'il faut où il faut.

  5. #5
    Membre éprouvé
    Avatar de Cacophrene
    Homme Profil pro
    Biologiste
    Inscrit en
    Janvier 2009
    Messages
    535
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Biologiste

    Informations forums :
    Inscription : Janvier 2009
    Messages : 535
    Points : 1 125
    Points
    1 125
    Par défaut
    Salut !

    Citation Envoyé par alex_pi
    Si tu ne veux pas t'embêter avec toutes ces options à la con, je ne saurais trop te conseiller d'utiliser ocamlbuild. Un simple ocamlbuild blah.byte se débrouillera tout seul pour linker ce qu'il faut où il faut.
    Ce serait bien sympathique mais j'ai peur que ça ne marche pas.

    Un code idiot tel que celui-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    (* test.ml *)
    let _ = Graphics.open_graph " "
    ne peut pas être compilé avec un appel comme ocamlbuild test.byte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $ ocamlbuild test.byte
    + /usr/local/bin/ocamlc.opt test.cmo -o test.byte
    File "_none_", line 1, characters 0-1:
    Error: Error while linking test.cmo:
    Reference to undefined global `Graphics'
    Command exited with code 2.
    Il faut être un peu plus explicite pour avoir ce que l'on veut. Je pense à quelque chose comme ocamlbuild -lib graphics test.byte. En fait ocamlbuild sait particulièrement bien linker/grouper les modules « persos » qui composent un même projet à coup d'ocamldep (mais pas seulement). Pour les libs externes ou hors stdlib il faut l'aider un petit peu (en ligne de commande ou avec le script myocamlbuild.ml, assorti ou non de fichiers divers comme _tags, .mlpack, etc.).

    Remarque pour Zooix : bien entendu, cela ne signifie pas pour autant qu'ocamlbuild est inutile. Son grand intérêt se manifeste surtout pour les moyens et gros projets, mais aussi lorsque l'on veut utiliser l'option -pack sans se prendre la tête, etc.

    Cordialement,
    Cacophrène

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 30
    Points : 24
    Points
    24
    Par défaut
    C'est bon, tout fonctionne parfaitement.

    Merci à vous deux .

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 30
    Points : 24
    Points
    24
    Par défaut
    J'ai comme toute bonne personne, essayé de bidouiller un peu, j'ai ré-écrit un code de zulon du sdz (pour ceux qui connaissent) concernant les triangles de Sierpinski en OCaml avec Graphics. Voilà le code:

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    open Graphics;;
     
    let draw_triangle (xa, ya) (xb, yb) (xc, yc) =
      moveto xa ya;
      lineto xb yb ;
      lineto xc yc;
      lineto xa ya;
    ;;
     
    let ( // ) (x1, y1) (x2, y2) = ((x1 + x2)/2, (y1 + y2)/2)
     
    let rec sierpinski (xa, ya) (xb, yb) (xc, yc) =
      function
        | 0 -> ()
        | acc -> (  
    	            draw_triangle (xa, ya) (xb, yb) (xc, yc);
                    sierpinski (xa, ya) ((xa, ya) // (xb, yb)) ((xa, ya) // (xc, yc)) (acc-1);
                    sierpinski (xb, yb) ((yb, yb) // (xa, ya)) ((xb, yb) // (xc, yc)) (acc-1);
                    sierpinski (xc, yc) ((xc, yc) // (xa, ya)) ((xb, yb) // (xc, yc)) (acc-1);
    			 )
    ;;
     
     
    auto_synchronize false;
    open_graph " 800x800";
    sierpinski (0,0) (400,800) (800,0) 9;;
    synchronize ();;
    ignore (read_key ());;
    Cela me fait un truc tout bizarre . Je ne vois pas d'où vient l'erreur, si quelqu'un passant par là pouvait me dépanner cela serais cool .

    Merci =) .

  8. #8
    Membre éprouvé
    Avatar de Cacophrene
    Homme Profil pro
    Biologiste
    Inscrit en
    Janvier 2009
    Messages
    535
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Biologiste

    Informations forums :
    Inscription : Janvier 2009
    Messages : 535
    Points : 1 125
    Points
    1 125
    Par défaut
    Salut !

    Ton problème se résout en simplifiant la fonction sierpinski :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    (* ... *)
    let rec sierpinski a b c i =
      if i > 0 then begin
        draw_triangle a b c;
        let j = i - 1 and bc = b // c in
        sierpinski a (a // b) (a // c) j;
        sierpinski b (b // a) bc j;
        sierpinski c (c // a) bc j
      end
    (* ... *)
    Il est inutile de détailler la structure des couples a, b et c dans la mesure où sierpinski ne se sert pas des coordonnées xa, ya, xb, ... yc. Cela pose d'ailleurs un problème assez amusant, comme tu as pu le voir, que je te laisse deviner.

    Cordialement,
    Cacophrène

Discussions similaires

  1. installation ocaml 3.11.2 + graphics
    Par totolosc1 dans le forum Caml
    Réponses: 11
    Dernier message: 28/11/2011, 23h33
  2. low graphics depuis installation des pilotes ATI
    Par Finality dans le forum Ubuntu
    Réponses: 2
    Dernier message: 27/04/2008, 22h42
  3. Problème d'installation oracle 8.1.7 sous NT
    Par Anonymous dans le forum Installation
    Réponses: 7
    Dernier message: 02/08/2002, 15h18
  4. Réponses: 7
    Dernier message: 01/05/2002, 21h23
  5. [Kylix] Comment installer Kylix sur Mandrake 8.2 (page2)
    Par Philippe LE PONT dans le forum EDI
    Réponses: 3
    Dernier message: 01/05/2002, 13h52

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