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

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 44
    Points : 23
    Points
    23
    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 é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
    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 à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 44
    Points : 23
    Points
    23
    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 à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 44
    Points : 23
    Points
    23
    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 à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 44
    Points : 23
    Points
    23
    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 é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
    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 à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2009
    Messages : 22
    Points : 22
    Points
    22
    Par défaut
    Personnelement j'ai testé avec ocamlopt et j'ai pas eu de soucis

    avec gtkInit.cmx et lablgtk.cmxa .

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 44
    Points : 23
    Points
    23
    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

  9. #9
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2009
    Messages : 22
    Points : 22
    Points
    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

  10. #10
    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
    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

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

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

  12. #12
    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
    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

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 44
    Points : 23
    Points
    23
    Par défaut
    j'ai essayé avec les 2 premières solutions mais ça ne marche pas. j'ai un nouveau type d'erreur qui est le suivant:
    Error: /usr/lib/ocaml/3.10.2/lablgtk2/gMain.cmi
    is not a compiled interface


    en attendant que j'essaie avec la troisième

    Mais si vous avez qd même des solutions pour cette erreur, n'hésitez pas

  14. #14
    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
    Re !

    Citation Envoyé par amiroushka
    j'ai essayé avec les 2 premières solutions mais ça ne marche pas. j'ai un nouveau type d'erreur qui est le suivant:
    Error: /usr/lib/ocaml/3.10.2/lablgtk2/gMain.cmi
    is not a compiled interface
    Dans ce cas il est fort probable qu'il y ait eu un mélange de versions... je crains que seule la réinstallation vienne à bout du problème.

    Cordialement,
    Cacophrène

  15. #15
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2009
    Messages : 22
    Points : 22
    Points
    22
    Par défaut
    Citation Envoyé par amiroushka Voir le message
    /usr/lib/ocaml/3.10.2/lablgtk2/gMain.cmi
    bonjour !

    Je tiens signaler que j'ai eu beaucoup d'erreur de ce type avec ocaml 3.10.2 en ce qui concerne gtk qui se sont resolus en passant avec ocaml 3.11

    J'espere que le seul upgrade de ocaml pourra t'aider ! sinon alors bah.... il va falloir que tu réinstalles tes libs ><

  16. #16
    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 kulssaka
    Je tiens signaler que j'ai eu beaucoup d'erreur de ce type avec ocaml 3.10.2 en ce qui concerne gtk qui se sont resolus en passant avec ocaml 3.11
    Jamais rien eu de tel en procédant à des installations à partir des sources. Il faut faire attention quand on utilise les gestionnaires de paquets. Ils sont très pratiques mais comme les versions ne sont pas les plus récentes (ça se comprend), on a vite fait de faire des mélanges sans s'en rendre compte et, on s'en doute, ça ne donne rien de bon. Comme l'alcool .

    Cordialement,
    Cacophrène

  17. #17
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2009
    Messages : 22
    Points : 22
    Points
    22
    Par défaut
    Citation Envoyé par Cacophrene Voir le message
    [...]à partir des sources. Il faut faire attention quand on utilise les gestionnaires de paquets.
    haha j'avoue j'ai fait moitié moitié au debut, mais là n'est pas le probleme, c'est que certaine libs qui ont été upgrade depuis ocaml 3.11 ça peut aussi posé des problèmes, en l'occurence sur un vieux ubuntu 9.04, MAJ et c'est reparti comme en 14, sauf qu'en 14 ils compilaient pas, biensur....

    Citation Envoyé par Cacophrene Voir le message
    Comme l'alcool .
    Au vu de ma derniere quote, je pense que t'as raison, j'ai la santé mentale fragile aussi je pense

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