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 :

[lablgtk2 et ocaml]Unbound value GMain.init


Sujet :

Caml

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 44
    Par défaut [lablgtk2 et ocaml]Unbound value GMain.init
    je viens d'installer ocaml ainsi que la bibliothèque lablgtk2
    et j'ai compilé mon projet avec la commande
    ocamlc -I +lablgtk2 -o test lablgtk.cma gtkInit.cmo test.ml

    mais j'ai eu l'erreur suivante : Unbound value GMain.init

    sachant que mon projet compile sur une autre machine sans aucun problème.
    est ce qu'il y a un module manquant? ou g un problème de compilateur?

  2. #2
    Membre émérite
    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
    Par défaut
    Bonjour !

    D'abord s'il y a un appel à GMain.init dans le code, il n'est plus nécessaire de passer gtkInit.cmo à ocamlc. L'erreur peut être causée par pas mal de choses différentes... il faudrait plus d'infos pour comprendre.

    À tout hasard, y a-t-il un module GMain dans le code source qui pourrait masquer le module GMain de LablGTK ? Quelque chose dans ce genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    module GMain = struct (* Masque le module GMain de LablGTK. *) end
    
    let _ = GMain.init ()
    Évidemment c'est un peu idiot mais ça donne la même erreur (Error: Unbound value GMain.init). Attention : ce n'est pas la seule possibilité... Il faudrait plus d'infos, notamment sur le récapitulatif de configuration donné par LablGTK quand on lance le script ./configure.

    Cordialement,
    Cacophrène

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 44
    Par défaut
    oui la première ligne de mon code est let _=GMain.init() et c'est au niveau de cette ligne que l'erreur est détecter.
    sinon aucun autre module GMain

    le problème ne peut pas être un problème de code car comme je l'ai mentionné, mon code compile sur une autre machine.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 44
    Par défaut
    ceci est le récapitulatif de la configuration de lablGTK après le lancement de la commande ./configure
    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
     
    LablGTK configuration:
    	threads  	system
    	native dynlink 	yes
    	GtkGLArea 	not found
    	libglade 	yes
    	librsvg  	yes
    	libgnomecanvas 	yes
    	libgnomeui 	yes
    	libpanelapplet 	yes
    	gtkspell 	yes
    	gtksourceview 1 	not found
    	gtksourceview 2 	not found
    	quartz    	not found
     
    	debug   	no
    	C compiler	gcc

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 44
    Par défaut
    voila j'ai essayé de compiler ce petit code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    let main () =       
      let window = GWindow.window () in
      window#show ();
      GMain.Main.main ()
     
    let _ = main ()
    et comme prévu j'ai eu l'erreur suivante: Unbound value GWindow.window

  6. #6
    Membre émérite
    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
    Par défaut
    Dans ce cas c'est sûrement un problème d'installation. Que donne la commande suivante lancée dans le terminal ?

    ls $(ocamlc -where)/lablgtk2

    Si ça ne donne rien, c'est que l'installation n'a pas été faite dans le bon répertoire, ou alors que le répertoire ne s'appelle pas lablgtk2.

    Cordialement,
    Cacophrène

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 44
    Par défaut
    En tapant cette commande ls $(ocamlc -where)/lablgtk2
    j'ai eu la ligne suivante:
    ls: ne peut accéder /usr/local/lib/ocaml/lablgtk2: Aucun fichier ou dossier de ce type

    donc comment je peux trouver où il a été installé ou dois-je faire l'installation de nouveau pour régler le problème. Comment dois-je procéder?

    Remarque: j'ai compilé avec ocamlopt mais le problème persiste

  8. #8
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2009
    Messages : 22
    Par défaut
    C'est sur que si il ne trouve pas ton dossier lablgtk2 alors ni ocamlc ni ocamlopt ne compilerons ^^

    Si tu es sur d'avoir ce dossier dans ton usr/lib/ocaml/ je pense qu'il faut soit
    1- que tu reinstalles ton lablgtk2
    2- que tu essayes de linker tes libs en voyant exactement ce que ton compilateur veut en passant en mode verbose. (Je sais pas si t'as lu mon post sur mon erreur de linkage, mais c'est assez semblable, apparement ma arch n'avait pas linké correctement )

    Je suis actuellement pas en mesure de te fournir plus de précision sur comment utiliser le mode verbose, je suis sur windaube XD je pense qu'un man ocamlc/ocamlopt t'indiqueras un -verbose

    Apres pour linker je suis pas au point il faudra te renseigner, mais il me semble qu'il faut se servir de ln - s mais après j'ai oublié!

    ps: quand je dis je pense essaye de confirmer mes dires avant quoi de faire quoi que ce soit, je voudrais pas etre la cause d'un nouveau problème si je dis une bêtise

  9. #9
    Membre émérite
    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
    Par défaut
    Bonjour !

    Avant de se lancer dans une réinstallation fastidieuse :

    Citation Envoyé par amiroushka
    Comment je peux trouver où il a été installé ?
    Avec locate lablgtk.cma par exemple. La commande devrait renvoyer le chemin d'accès complet à la bibliothèque (par exemple chez moi j'obtiens /usr/lib/ocaml/3.11.1/lablgtk2/lablgtk.cma).

    Citation Envoyé par amiroushka
    Dois-je faire l'installation de nouveau pour régler le problème ?
    Si la commande locate ne donne rien, oui. Mais dans ce cas, il faut bien regarder le récapitulatif que donne ./configure.

    Cordialement,
    Cacophrène

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 44
    Par défaut
    la commande locate me donne presque la même chose que vous:
    /usr/lib/ocaml/3.10.2/lablgtk2/lablgtk.cma

  11. #11
    Membre émérite
    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
    Par défaut
    Re !

    Citation Envoyé par amiroushka
    la commande locate me donne presque la même chose que vous:
    /usr/lib/ocaml/3.10.2/lablgtk2/lablgtk.cma
    Fort bien, la solution est trouvée.

    La bibliothèque LablGTK2 a été installée dans /usr/lib/ocaml/3.10.2/lablgtk2. Or nous savons que ls $(ocamlc -where)/lablgtk2 ne donne rien. J'en déduis que la commande ocamlc -where ne renvoie pas /usr/lib/ocaml/3.10.2 (facile). Et c'est bien le cas :

    Citation Envoyé par amiroushka
    En tapant cette commande ls $(ocamlc -where)/lablgtk2 j'ai eu la ligne suivante:
    ls: ne peut accéder /usr/local/lib/ocaml/lablgtk2: Aucun fichier ou dossier de ce type
    La bibliothèque standard est dans /usr/local/lib/ocaml, de sorte que +lablgtk2 devrait être /usr/local/lib/ocaml/lablgtk2 et non /usr/lib/ocaml/3.10.2/lablgtk2.

    Il y a donc plusieurs solutions :

    1. Déplacer le dossier lablgtk2 et son contenu dans /usr/local/lib/ocaml pour pouvoir utiliser -I +lablgtk2 dans la ligne de commande.
    2. Utiliser ocamlc -I /usr/lib/ocaml/3.10.2/lablgtk2 puisque le répertoire d'installation n'est pas un sous-répertoire de l'installation de caml.
    3. Tout désinstaller (OCaml et LablGTK) et réinstaller proprement !

    Bien évidemment je suggère fortement la troisième solution. On ne peut pas programmer sereinement avec une installation aussi farfelue.

    Cordialement,
    Cacophrène

Discussions similaires

  1. Null servlet init parameter name or value
    Par omar344 dans le forum JSF
    Réponses: 1
    Dernier message: 18/01/2015, 15h51
  2. Réponses: 2
    Dernier message: 21/11/2012, 18h32
  3. [Lablgtk2 + Ocaml] Tracé de points
    Par altharaz dans le forum Caml
    Réponses: 7
    Dernier message: 19/01/2010, 22h04
  4. Error: Unbound value GtkBaseProps.Window.cast
    Par kulssaka dans le forum Caml
    Réponses: 8
    Dernier message: 05/11/2009, 06h08
  5. [OCaml] Toujours "Unbound value..."
    Par robfinck dans le forum Caml
    Réponses: 1
    Dernier message: 16/11/2004, 22h57

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