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
    Membre éclairé Avatar de HanLee
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    738
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2004
    Messages : 738
    Points : 871
    Points
    871
    Par défaut [OCaml] Problème de compilation
    Salut,

    J'viens d'installer Glcaml sur mon Linux, le truc qui m'énerve à l'utilisation c'est qu'il faut se trimballer les 3 fichiers glcaml.ml, .mli et glcaml_stub.c à chaque nouveau projet.

    Avec ocamlopt, je me suis créé :
    - glcaml.cmi
    - glcaml.cmx
    - glcaml_stub.o
    - glcaml.cmxa + glcaml.a à l'aide de glcaml.cmx et glcaml_stub.o

    Que j'ai placés dans un répertoire spécial.

    Comme ça, j'ai juste besoin de donner le path pour la bibliothèque et son nom (glcaml.cmxa) au linker.

    Problème, quand ocamlopt appelle gcc, gcc me dit qu'il n'arrive pas à trouver glcaml_stub.o (bien sûr, ça marche quand tout est dans le bon répertoire).

    Vous savez les bonnes commandes à passer à ocamlopt ?
    J'utilise OCamlMakefile.

    Merci d'avance

  2. #2
    alex_pi
    Invité(e)
    Par défaut
    Je sais que ça ne répond pas à ta question, mais pour moi, c'est normalement LablGL qui doit être utilisé pour le binding openGL de Caml. Et lui, je suis sûr qu'il marche proprement avec godi et ocamlfind.
    Et pour faire des Makefile pour projet OCaml, je ne saurais trop te conseiller OMake

    Après, pour ton problème spécifique, désolé, je ne sais pas bien, mais je suppose que l'option -ccopt devrait aider non ?

  3. #3
    alex_pi
    Invité(e)
    Par défaut
    Pour revenir sur l'utilisation de GLCaml, moi quand je lis
    GLCaml is a direct, not particularly type-safe binding to OpenGL.
    [...]
    * This binding is wholly automatically generated and contains hundreds of function bindings, the vast majority of which have not been tested. Use at your own risk.
    ca ne me vend pas du rêve !

  4. #4
    Membre éclairé Avatar de HanLee
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    738
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2004
    Messages : 738
    Points : 871
    Points
    871
    Par défaut
    - J'ai essayé avec -ccopt, je sais pas quoi mettre dedans. Je lui ai mis le path avec -I, et ça marche pas.
    - A propos d'OMake, je sais j'l'utilisais sous Windows. Mais disons que là j'ai utilisé OCamlMakefile vu que c'était dans les exemples et ça marchait bien avec tout le bordel quand tu mélangeais avec des .c, .o.

    - Ben la seule raison pour laquelle j'ai choisi Glcaml, c'est parce qu'il était mis à jour bien plus souvent, et qu'il supportait les shaders.

    Sinon, je serais resté à Lablgl.

  5. #5
    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
    Si tu utilises -ccopt, c'est la doc du compilo C qu'il faut aller voir... étant donné que les arguments de -ccopt sont les options du compilo C utilisé sur le système.
    When Colt produced the first practical repeating handgun, it gave rise to the saying God created men, but Colt made them equal.

  6. #6
    Membre éclairé Avatar de HanLee
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    738
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2004
    Messages : 738
    Points : 871
    Points
    871
    Par défaut
    Ben comme j'ai dit, c'est un simple gcc sur une Ubuntu.

    Non mais en fait, le .cmxa il fait appel à glcaml_stubs.o d'une certaine manière, c'est pour ça que le compilateur sait qu'il faut le chercher, et il le dit à gcc.

    Mais quand il le lui dit, il doit sûrement utiliser -ccopt, je lui ai bien passé le chemin en include via Avec -L ça marche pas mieux.

    En même temps, si je comprends bien, ça doit pas marcher parce que ce sont les chemins pour les includes et pour les bibliothèques.

    Et un fichier .o, ben ça rentre dans aucune des catégories, et le seuil moyen est de faire une sorte de "cd".

    -----

    En attendant, j'ai évité le problème mais en me trimballant plus qu'un fichier, le fichier .c dans le même répertoire.

    Au pire, vous pouvez essayer, ya besoin de 3 fichiers seulement, et OCamlSDL.

  7. #7
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Août 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2009
    Messages : 13
    Points : 20
    Points
    20
    Par défaut Problème contenu fenêtre OpenGL
    bonjour j'ai pour ma part un petit problème avec Lablgl:

    souhaitant utiliser OpenGL avec OCaml j'ai cherché quelques tuto avec mon ami Google et trouvé quelques codes de bases.

    La compilation fonctionne (ocamlopt -I +lablgl lablgl.cmxa lablglut.cmxa ...)
    mais quand je lance l'éxecutable, je me retrouve avec une fenêtre vide au lieu d'un... triangle rouge sur fond noir:
    est-ce que quelqu'un sait d'où ça peut venir? merci

    Sous Jaunty et compiz desactivé

  8. #8
    Alp
    Alp est déconnecté
    Expert éminent sénior

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Points : 11 860
    Points
    11 860
    Par défaut
    Une erreur quelconque dans la console pendant l'exécution ?

  9. #9
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Août 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2009
    Messages : 13
    Points : 20
    Points
    20
    Par défaut
    non elle affiche aucun message, et j'ai remarqué que le triangle s'affiche un quart de seconde lorsque je ferme la fenêtre.

    est-ce que ça peut venir de l'installation de la librairie? je suis passé par synaptic.

    merci de ton aide

  10. #10
    Alp
    Alp est déconnecté
    Expert éminent sénior

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Points : 11 860
    Points
    11 860
    Par défaut
    Citation Envoyé par quentinc86 Voir le message
    non elle affiche aucun message, et j'ai remarqué que le triangle s'affiche un quart de seconde lorsque je ferme la fenêtre.

    est-ce que ça peut venir de l'installation de la librairie? je suis passé par synaptic.

    merci de ton aide
    Euh, tu peux montrer ton code ?
    Je soupçonne que tu ne fasse rien après l'affichage, et que donc la fenêtre ne s'affiche que le temps de passer à la suite du code...

  11. #11
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Août 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2009
    Messages : 13
    Points : 20
    Points
    20
    Par défaut
    le voilà:

    let display () =
    GlClear.clear [`color];
    GlDraw.color (1., 0., 0.);
    GlDraw.begins `triangles;
    GlDraw.vertex2 (-1.0, -1.0);
    GlDraw.vertex2 ( 0.0, 1.0);
    GlDraw.vertex2 ( 1.0, -1.0);
    GlDraw.ends ();;
    let () =
    ignore (Glut.init Sys.argv);
    ignore (Glut.createWindow ~title:"opengl");
    Glut.displayFunc ~cb:display;
    Glut.mainLoop ();;

  12. #12
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Août 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2009
    Messages : 13
    Points : 20
    Points
    20
    Par défaut
    ça doit être une erreur de code: j'ai essayé un code un peu plus compliqué avec une rotation en fonction de Sys.time et celui-ci fonctionne correctement.

    Si tu sait me dire quelle est mon erreur merci
    bon bah je retourne dans ocamlbrowser

  13. #13
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 128
    Points : 146
    Points
    146
    Par défaut
    Citation Envoyé par quentinc86 Voir le message
    le voilà:

    let display () =
    GlClear.clear [`color];
    GlDraw.color (1., 0., 0.);
    GlDraw.begins `triangles;
    GlDraw.vertex2 (-1.0, -1.0);
    GlDraw.vertex2 ( 0.0, 1.0);
    GlDraw.vertex2 ( 1.0, -1.0);
    GlDraw.ends ();;
    let () =
    ignore (Glut.init Sys.argv);
    ignore (Glut.createWindow ~title:"opengl");
    Glut.displayFunc ~cb:display;
    Glut.mainLoop ();;
    à mon avis ce qu'il manque dans ce code est un appel à Glut.swapBuffers() à la fin de la fonction display.
    chez moi le code fonctionne tel que, mais suivant la carte graphique il peut y avoir des comportements légèrement différents.

  14. #14
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 128
    Points : 146
    Points
    146
    Par défaut
    Citation Envoyé par HanLee Voir le message
    Avec ocamlopt, je me suis créé :
    - glcaml.cmi
    - glcaml.cmx
    - glcaml_stub.o
    - glcaml.cmxa + glcaml.a à l'aide de glcaml.cmx et glcaml_stub.o

    Que j'ai placés dans un répertoire spécial.

    Comme ça, j'ai juste besoin de donner le path pour la bibliothèque et son nom (glcaml.cmxa) au linker.

    Problème, quand ocamlopt appelle gcc, gcc me dit qu'il n'arrive pas à trouver glcaml_stub.o (bien sûr, ça marche quand tout est dans le bon répertoire).
    Je viens de regarder glcaml et c'est vrai que le Makefile est tout pourri et ne crée pas correctement une lib prête à l'emploi, donc il faut que tu le fasses toi-même.
    Voici les commandes à utiliser :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    ocamlopt -c glcaml.mli
    ocamlopt -c glcaml.ml
    ocamlc -c glcaml.ml
    ocamlc -c glcaml_stub.c
    ocamlmklib -o glcaml glcaml_stub.o -lGL
    ocamlmklib -o glcaml glcaml.cmx -lGL
    ocamlmklib -o glcaml glcaml.cmo -lGL
    su  # ou sudo
    DESTDIR=`ocamlc -where`/glcaml
    install -d $DESTDIR
    install -m 0755  dllglcaml.so  $DESTDIR
    install -m 0644  glcaml.a libglcaml.a glcaml.cmi glcaml.cmx glcaml.cmxa glcaml.cma  $DESTDIR
    à partir de là tu pourras utiliser glcaml normalement comme une lib ocaml habituelle.

    [edit]
    petite précision pouvant être utile aux débutants, pour compiler (si vous n'avez pas modifié DESTDIR ci-dessus) utiliser alors :
    -I +glcaml glcaml.cmxa

Discussions similaires

  1. [OCamL]problème de compilation
    Par leaf blade dans le forum Caml
    Réponses: 4
    Dernier message: 12/01/2010, 15h40
  2. Réponses: 4
    Dernier message: 31/08/2009, 19h26
  3. [Ocaml]Problème de compilation
    Par Cooky dans le forum Caml
    Réponses: 7
    Dernier message: 23/03/2007, 20h41
  4. Problème de compilation de la DLL du XMLRad
    Par [DreaMs] dans le forum XMLRAD
    Réponses: 2
    Dernier message: 16/04/2003, 16h46
  5. Réponses: 1
    Dernier message: 27/05/2002, 01h44

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