Vous n'êtes pas identifié.
Ca compile!
Chapeau bas: tu as vraiment bien écrit!
Bon, quand je lance j'ai une fenêtre grise et une foultitude d'erreurs gtk
J'y retourne...
Hors ligne
Quelques questions:
Le fichier "config" est apparemment une base sqlite, n'est ce pas?
Ce fichier est-il créé par l'application si non existant au lancement ou doit-il exister?
Est-ce judicieux d'appeler la base de donnée "config"? Ou y'a qqch que j'ai pas compris?
Ca rame pas mal pour le moment... La compilation est allée assez vite (tu programmes proprement), mais y'aura quand même une foultitude de détails à régler...
Yannick
Hors ligne
le probleme de config c'est que j'ai fait ça au tout début. Ce n'est donc pas super nickel. Ca ne doit pas marcher parce qu'il y a \ en dur comme séparateur de fichier.
en remplaçant les "\\" par wxFileName::GetPathSeparators() tu résoudra certainement le probleme.
PAr contre ce n'est pas si propre que ça : j'ai un peu regardé le source et on retrouve pas mal d'antislash à pas mal d'endroit.
(et ça compile, non pas parce que le code est propre, mais parce que toutes les librairies utilisée sont cross-platform )
PS : pour le nom du fichier je l'ai appelé config pour ne pas que les gens le prenne pour une base de livre. (maintenant si tu veux un autre nom sous linux il ' a moyen (simplement) de savoir sous quelle OS on tourne avec wxwidget.
Hors ligne
fougny a écrit:
en remplaçant les "\\" par wxFileName::GetPathSeparators() tu résoudra certainement le probleme.
Si tu regardes mon commit 17 (http://svn.gna.org/viewcvs/livrotheque/ … &r2=17), tu verras que c'est un peu ce que je suis en train de faire...
fougny a écrit:
PAr contre ce n'est pas si propre que ça : j'ai un peu regardé le source et on retrouve pas mal d'antislash à pas mal d'endroit.
Je verrai; pour le moment y'a un problème wx beaucoup plus grave:
(livrotheque:22162): Gtk-WARNING **: gtk_widget_size_allocate(): attempt to allocate widget with width -9 and height 1
Le programme démarre, mais apparaît une fenêtre grise et vide avec juste une barre de menue qui clignote très vite au dessus (inutilisable).
fougny a écrit:
PS : pour le nom du fichier je l'ai appelé config pour ne pas que les gens le prenne pour une base de livre. (maintenant si tu veux un autre nom sous linux il ' a moyen (simplement) de savoir sous quelle OS on tourne avec wxwidget.
Avant de savoir comment le nommer, je voudrais déjà réponse à mes questions précédentes (et quelques autres):
- c'est bien du sqlite?
- C'est généré par le programme si absent ou ca doit impérativement être présent?
- Ca contient quoi et ca sert à quoi?
Mais ce problème d'erreur gtk est vraiment bloquant: tant que j'aurai pas compris ça n'ira pas. Crées-tu des objets à partir de descriptions dans des fichiers de ressources que je pourrais ne pas ou mal lire?
Merci,
Yannick
Hors ligne
YannickPatois a écrit:
Avant de savoir comment le nommer, je voudrais déjà réponse à mes questions précédentes (et quelques autres):
- c'est bien du sqlite?
- C'est généré par le programme si absent ou ca doit impérativement être présent?
- Ca contient quoi et ca sert à quoi?
Mais ce problème d'erreur gtk est vraiment bloquant: tant que j'aurai pas compris ça n'ira pas. Crées-tu des objets à partir de descriptions dans des fichiers de ressources que je pourrais ne pas ou mal lire?
Pour répondre qux questions :
Le fichier de config est bien fait en sqlite.
Normalement si il n'existe pas je n'en tiens pas compte (il n'est pas indispensable au démarrage de l'appli).
il est généré par le programme lorsqu'on le quitte
Je te conseillerai (au début) d'enlever la gestion de config si ça te pose probleme (en gros tu vides les fonction sauve_config et load_congig -> elles ne feront plus rien(ou tu mets un return au début de la fonction). Je ne m'en sert que pour me rappeler la taille et la position du programme et le nom du fichier ouvert lors de la dernière utilisation.
Et c'est le seul fichier de config que j'ai!
Sinon la fenêtre de début est initialiséedans la fonction void biblioFrame::CreateGUIControls(void) donc si tu as un probleme au démarrage ça doit être la (mais je ne vois pas pourquoi ça te ferait cette erreur).
Hors ligne
Salut,
Merci de tes résponses!
Moi non plus je ne vois pas pourquoi ça déconne dans le GTK. Ce que je soupçonne c'est que tu ais laissé quelque part une valeur non initialisée et que linké sous windows ca passe mais pas sous Linux. Mais j'ai encore rien de concret...
Question bidon, par contre: dans ton code, j'ai vu des indentations avec 4 espaces et des indentations en tab (\t). Que préfères tu? Je suis plutôt partisan du 4 espaces, pour ma part, mais si tu préfères autre choses, je modifierai...
Yannick
Hors ligne
Je suis partisan des 4 espaces à 100%
Les tabs doivent venir de la génération automatique de wxdevcpp.
Hors ligne
J'ai essayé de regarder dans le code ou je pouvais générer ceci
(livrotheque:22162): Gtk-WARNING **: gtk_widget_size_allocate(): attempt to allocate widget with width -9 and height 1
Mais je ne vois nulle part ou je donnerais une valeur négative à une fenêtre quelconque.
Je donne partout soit des valeurs positive soit wxDefaultSize
et d'apres la doc :
doc_wxwidget a écrit:
If the size passed to the constructor is the default wxDefaultSize, or if the size is not fully specified (such as wxSize(150,-1)) then most controls will fill in the missing size components using the best size and will set the initial size of the control to the resulting size.
Tu n'as pas moyen de faire passer le code pas à pas sous linux histoire de voir ou se passe le probleme??
Sinon perso la méthode (bourrin) que j'aime bien c'est de mettre un peu partout des
wxMessageBox("pouet1","tralala", wxOK | wxICON_INFORMATION, this);
wxMessageBox("pouet2","tralala", wxOK | wxICON_INFORMATION, this);
et de voir apres quel pouet le probleme se fait.
(voui c'est bourrin mais ça marche tres bien!! )
Hors ligne
fougny a écrit:
J'ai essayé de regarder dans le code ou je pouvais générer ceci
Code:
(livrotheque:22162): Gtk-WARNING **: gtk_widget_size_allocate(): attempt to allocate widget with width -9 and height 1Mais je ne vois nulle part ou je donnerais une valeur négative à une fenêtre quelconque.
J'ai passé un débugger, mon sentiment est que j'ai eu un problème en recompilant wxwidgets (je n'avais pas la version non unicode), et que quelque part y'a une déclaration incohérente de wxSize (si je me souviens bien, je n'ai pas le code sous les yeux).
En effet, le code sous le débugger semble tout a fait propre, et une affectation de deux int membre (x et y) provoque une écriture sans rapport... Ca ressemble a un problème d'adresse à la compilation (par exemple avec deux versions incompatibles du même header, l'un étant OK, l'autre ayant été pêché je ne sais où).
Je vais regarder ça de nouveau, mais probablement pas aujourd'hui... Trop occupé.
Yannick
Hors ligne
Sinon tu pourrais essayer de compiler avec le build unicode.
Cela limiterai peut être les problèmes.
mais je n'ai absolument aucune idée des impacts que cela peut avoir sur le programme.
Je serais peut être obligé d'y passer vu qu'en 3.0 il n'existera plus qu'une seule build de wxwidgets (et il n'y a pas beaucoup de chances que ce soit l'ansi )
Hors ligne
fougny a écrit:
Sinon tu pourrais essayer de compiler avec le build unicode.
Cela limiterai peut être les problèmes.
mais je n'ai absolument aucune idée des impacts que cela peut avoir sur le programme.
C'est beaucoup de travail, hélas. Comme je l'avais essayé au début, cela casse la plupart des déclarations de chaines statiques...
fougny a écrit:
Je serais peut être obligé d'y passer vu qu'en 3.0 il n'existera plus qu'une seule build de wxwidgets (et il n'y a pas beaucoup de chances que ce soit l'ansi
)
Dans ce cas, tu pourrais passer à l'unicode de ton coté (à partir de ton code qui marche). Commit ça sur GNA, et je le récupère pour mon build. Mais ça risque d'être assez long, ça dépend du temps dont tu disposes.
Mais pour que de mon coté je le fasse en ansi, ça dépendra du temps que moi je peux consacrer
Je vais essayer de trouver le temps de recompiler encore une fois wxwidgets, en ayant au préalable bien nettoyé les autres versions qui se cachaient ailleurs dans mon système (seule raison que je vois pour un tel comportement).
Yannick
Hors ligne
Autant passer la version linux en unicode ne me générais pas à priori, autant passer la version windows est problématique.
Il faut prendre en compte toutes les bases de données existante et passer en unicode changeant la manière de gérer les chaines de caractères, ces anciennes bases risquent de donner des affichages bizarres pour tous les caractère accentués.
Hors ligne
Hum,
On ne peut pas trop diverger entre les versions. En particulier, des utilisateurs voudront passer des bases de windows à Linux et inversement.
Le format doit donc rester le même.
Si le passage à Unicode doit être fait (et je pense qu'il le doit), il faudra prévoir un test de la version de la base et une mise à jour...
D'autre part, je viens de faire de nouveau tests: je n'en suis qu'au début, mais j'ai une erreur assez semblable sur une autre machine avec une autre installation de wxwidgets... Je suis donc très perplexe...
Yannick
Hors ligne
tu sais sur quelle ligne du code cela arrive?
Hors ligne
Bon, voilà ce que ca donne ici:
Breakpoint 2, 0x021ec346 in gtk_window_resize () from /usr/lib/libgtk-x11-2.0.so.0 (gdb) backtrace #0 0x021ec346 in gtk_window_resize () from /usr/lib/libgtk-x11-2.0.so.0 #1 0x00f04567 in wxTopLevelWindowGTK::DoSetSize (this=0x99517f8, x=-1, y=-1, width=648, height=180, sizeFlags=0) at ../src/gtk/toplevel.cpp:945 #2 0x00f046dc in wxTopLevelWindowGTK::DoSetClientSize (this=0x99517f8, width=648, height=180) at ../src/gtk/toplevel.cpp:978 #3 0x00f622ef in wxFrame::DoSetClientSize (this=0x99517f8, width=648, height=180) at ../src/gtk/frame.cpp:320 #4 0x00d3d028 in wxWindowBase::SetClientSize (this=0x99517f8, width=648, height=180) at ../include/wx/window.h:252 #5 0x00d5423a in wxSplashScreen (this=0x99517f8, bitmap=@0xbfef8180, splashStyle=5, milliseconds=6000, parent=0x0, id=-1, pos=@0x826b4a8, size=@0x826b4d0, style=33587200) at ../src/generic/splash.cpp:67 #6 0x080672e7 in biblioFrame (this=0x9754ad8, parent=0x0, id=1, title=@0xbfef81e0, position=@0x826b4a8, size=@0x826b4d0, style=537140800) at src/biblioFrame.cpp:154 #7 0x0806be75 in biblioFrameApp::OnInit (this=0x9951b58) at /usr/local/wxgtk/include/wx-2.8/wx/string.h:368 #8 0x0806bf93 in wxAppConsole::CallOnInit (this=0x9951b58) at /usr/local/wxgtk/include/wx-2.8/wx/app.h:76 #9 0x005c6149 in wxEntry (argc=@0xbfef82a0, argv=0xbfef8324) at ../src/common/init.cpp:436 #10 0x0806be28 in main (argc=1, argv=0xbfef8324) at src/biblioFrameApp.cpp:45
J'ai hacké wxTopLevelWindowGTK::DoSetSize pour y coller quelques print:
width: 648 height: 180 1- m_width: 100 1- m_height: 100 2- m_width: 648 2- m_height: 180 3- minWidth: 15714338 3- maxWidth: 15714252 4- m_width: 15714252 4- m_height: -1208823096 5- m_width: 15714252 5- m_height: -1208823096
Ca commence raisonnablement, et fini bizarrement.
Ce qui semble déconner, ce sont les appels ici:
int minWidth = GetMinWidth(), minHeight = GetMinHeight(), maxWidth = GetMaxWidth(), maxHeight = GetMaxHeight();
Ils sont difficile à suivre car visiblement inlinés...
OK, on est hors de ton code, et dans l'implémentation GTK de wxwigdets. Alors, bug dans cette implémentation? Ca me parait difficile à croire... Mais quoi, alors?
C'est pas gagné.
Yannick
Hors ligne
oui alors c'est vraiment tres tres bizarre, parce que d'apres ton premier dump on plante sur la ligne 45 de biblioframeApp.cpp quiest : IMPLEMENT_APP(biblioFrameApp).
Ce qui me semble tout à fait surréaliste (l'appli n'a encore rien fait à ce niveau la). La compilation d'un sample de wxwidget (de type hello world) fonctionne??
(trouvable ici : http://www.wxwidgets.org/docs/tutorials/hello.htm )
tiens d'ailleurs en parcourant cet exemple j'y ai trouvé cela :
If you get an instant error from your X server and then a crash, then you compiled your library with thread support although your system doesn't support it. You'll have to configure --without-threads and recompile all of wxGTK after a "make clean".
Qui pourrait ressembler à ton probleme
Hors ligne
fougny a écrit:
oui alors c'est vraiment tres tres bizarre, parce que d'apres ton premier dump on plante sur la ligne 45 de biblioframeApp.cpp quiest : IMPLEMENT_APP(biblioFrameApp).
Ce qui me semble tout à fait surréaliste (l'appli n'a encore rien fait à ce niveau la).
Pas vraiment: c'est une macro de fou là derrière. Là dedans, se planque le main(), et une foultitude d'initialisation et de bidules, dont la création de ta main window et avant ça du splash-screen: y'a donc de la place pour des bugs!
fougny a écrit:
La compilation d'un sample de wxwidget (de type hello world) fonctionne??
(trouvable ici : http://www.wxwidgets.org/docs/tutorials/hello.htm )
Ca compile et ca tourne sans erreur.
fougny a écrit:
tiens d'ailleurs en parcourant cet exemple j'y ai trouvé cela :
If you get an instant error from your X server and then a crash, then you compiled your library with thread support although your system doesn't support it. You'll have to configure --without-threads and recompile all of wxGTK after a "make clean".
Qui pourrait ressembler à ton probleme
Je doute que mon système ne supporte pas les threads, mais des variables qui se marchent sur les pieds, ça pourrait être causé par ça aussi... Je vais essayer.
Edit: même résultat.
Yannick
Dernière modification par YannickPatois (27-11-2007 17:13:07)
Hors ligne
et bien à ce niveau la je ne sais plus trop quoi dire.
Si ce n'est essayer de 'castrer' le programme bout par bout pour voir d'ou vient le problème. (style virer le splash pour commencer)
Mais c'est vraiment bizarre tout ça (j'ai essayer de faire une recherche sur le net de personnes ayant eut ce genre de problème sous linux et je n'ai rien trouvé)
PS : dans les idées saugrenues, ce ne serait pas un probleme avec la gestion des fichiers xpm (qui contiennent les images?)
PPS : en regardant le makefile.linux : j'ai du mal à voir comment la dernière ligne :
o/livrotheque_private.res: o/livrotheque_private.rc $(WINDRES) --input-format=rc -o o/livrotheque_private.res $(RCINCS) o/LIVROT~1.RC -O coff
peut fonctionner : à ma connaissance ce genre de ficheir n'est pas utilisée sous unix. (mais je peux me tromper) de plus je ne vois pas ou la variable $(WINDRES) est définie
Hors ligne
fougny a écrit:
et bien à ce niveau la je ne sais plus trop quoi dire.
Si ce n'est essayer de 'castrer' le programme bout par bout pour voir d'ou vient le problème. (style virer le splash pour commencer)
Oui, je vais faire ça... Ca va demander du temps!
fougny a écrit:
Mais c'est vraiment bizarre tout ça (j'ai essayer de faire une recherche sur le net de personnes ayant eut ce genre de problème sous linux et je n'ai rien trouvé)
Je connais rien à wxwidgets, je vais essayer d'appeler à l'aide sur leurs lidies, mais avant cela, je vais quand même devoir simplifier le problème, donc couper grave dans le code..
fougny a écrit:
PS : dans les idées saugrenues, ce ne serait pas un probleme avec la gestion des fichiers xpm (qui contiennent les images?)
Je ne pense pas, mais je verrai bien
fougny a écrit:
PPS : en regardant le makefile.linux : j'ai du mal à voir comment la dernière ligne :
Code:
o/livrotheque_private.res: o/livrotheque_private.rc $(WINDRES) --input-format=rc -o o/livrotheque_private.res $(RCINCS) o/LIVROT~1.RC -O coffpeut fonctionner : à ma connaissance ce genre de ficheir n'est pas utilisée sous unix. (mais je peux me tromper) de plus je ne vois pas ou la variable $(WINDRES) est définie
Cette ligne est inutile, en effet, "o/livrotheque_private.res" n'étant plus une dépendance de exe/livrotheque, le makefile n'appelle jamais ce bout de code. Je vais l'enlever.
Yannick
Hors ligne
Bon, y'a bien un problème sur ma version de wxwidgets!
Je compile sur RedHat (au boulot) et sur Debian (à la maison). Au boulot, j'ai compilé le hello world sans problème, mais à la maison, avec la version 2.6 c'est bon, mais avec la 2.8 j'ai un problème d'affichage des menus qui ressemble à ce que j'ai avec livrothèque...
Y'a donc bien un problème avec la version 2.8-gtk, du moins dans mon environnement.
Je continue à creuser...
Yannick
Hors ligne
Bin c'est plutot une bonne nouvelle (enfin de mon point de vue ) : y'aura pas tout le code à casser!
Hors ligne
Enfin, partiellement:
Le problèmes vu précédemment (Gtk-WARNING **: gtk_widget_size_allocate(): attempt to allocate widget with width -9 and height 1) existe toujours mais maintenant c'est cohérent entre mes deux plate formes ce qui n'était pas le cas auparavant.
En effet, aujourd'hui en mettant à jour mes packages [1], j'ai vu arriver une nouvelle version de wxwidget-dev 2.8: elle corrige les erreurs précédentes (je peux compiler hworld, qui marche correctement [2]) et y'a maintenant la version ansi
Évidemment, ça ne résout rien...
Par contre, au boulot, là j'ai beaucoup de travail, et à la maison aussi: je vais pas avoir beaucoup de temps à consacrer à Livrothèque la semaine prochaine...
Yannick
[1] Deux commandes pour mettre à jour plus de 2000 packages, du noyau du système jusqu'au traitement de texte, en passant, bien sur par mes outils de dev, dont wxwidgets; ca me scie toujours que l'on prétende que la mise à jour logicielle puisse être plus simple sous win.
[2] Hummm, je vais tester d'autres exemples, je crains qu'il n'y ait encore des trucs zarbis...
Hors ligne
Bon
Mettre à jour un pkg windows est peut être moins facile, mais au moins ça marche: je pédale toujours dans la choucroute là, sous Linux... Beaucoup de taf, alors très peu de temps pour cela la semaine passée. J'espère avoir quelques heures ce WE encore...
Hors ligne
Yeah!
Grande victoire, j'ai eu une fenêtre sans trop d'erreurs.
J'ai pas touché au code, mais j'ai viré toutes les optimisations de compilation (quand on comprend pas ce que fais le programme sous le débugger par rapport au code qu'on a sous les yeux, c'est une chose à faire, j'aurais du y penser plus tôt).
Voilà ce que j'obtiens:
OK, c'est sûrement pas tout à fais ça Mais au moins c'est quelque chose!
Bon, ca plante vite ensuite quand je me balade dans les menus, mais les erreurs semblent plus compréhensibles...
A bientôt!
Hors ligne
N'hésite pas à me donner les erreurs que tu obtiens. J'aurais peut être des idées sur le pourquoi ça plante.
Sinon j'ai pas mal utilisé une mailing list au début : wx-users@lists.wxwidgets.org. Il y a pas mal de personnes pleins de bons conseil la bas. l'adresse du site ou ils en parlent : http://www.wxwidgets.org/support/maillst2.htm (c'est la première de la liste qui est intéressante).
Hors ligne