-
erreur a la compilation
Bonjour,
J'essaie de compiler un des exemples de la doc qt mais une erreur persiste à la compilation. Il s'agit de l'exemple --> Main Window --> Multiple document interface. Voici l'erreur.
[Linker error] undefined reference to `qInitResources_mdi()'
Pour info, j'ai fait un qmake -project puis un qmake dans le répertoire concerné. Puis j'ai fait qt-moc-ui qui m'a généré deux fichier moc. J'ai ensuite compiler a l'aide de devcpp
quelqu'un sait d'ou l'erreur peut venir?
Merci d'avance
-
Salut,
As-tu bien un fichier .qrc? Et une ligne dans le .pro du type: RESOURCES=application.qrc?
Si oui, le makefile généré devrait automatiquement appeller le binaire rcc qui transformera le .qrc en .rcc.
-
Oui j'ai bien un fichier mdi.qrc et dans mon fichier Projet.pro j'ai la ligne suivante
RESOURCES += mdi.qrc
donc ça devrait marcher, mais....non tjrs l'erreur
-
Ce que je ne comprends pas, c'est ça: "Puis j'ai fait qt-moc-ui"
C'est quoi et ça sort d'où? :)
Normalement, un simple qmake -project && qmake (ce que tu as déjà donc fait) puis mingw32-make, devrait fonctionner. Je ne vois pas la place de qt-moc-ui :)
-
en fait si je fais pas: qt-moc-ui et que j'essaie de compiler j'ai des erreurs du type
[Linker error] undefined reference to `vtable for MainWindow'
[Linker error] undefined reference to `MainWindow::staticMetaObject'
...
Alors j'ai chercher un peu sur le web et j'ai vu qu'on pouvait faire qt-moc-ui qui te génère deux fichiers dans ce cas ci :moc_mainwindow.cpp et moc_mdichild.cpp que j'ajoute ensuite au projet. Ensuite je compile avec devcpp.
Avec d'autres exemples de la doc et en suivant le meme procédé ça marche.
Si je tape comme tu dis: mingw32-make, il me dit que ça n'est pas reconnu en tant que commande interne ou externe...
-
Ah ok, je viens de chercher ce que c'était... En fait tu passes pas vraiment par le système de qmake. Quand tu as le choix, ne le fait pas, et utilise le (sauf si tu maitrises un autre système, mais dans ton cas, le qt-moc-ui ne fait que son boulot, c'est à dire qu'il zappe allégrement les ressources, et j'imagine aussi les traductions:aie:).
Dans ton dev-cpp, essaie autre chose: au lieu d'utiliser qt.mak (si je comprends bien, c'est ce que tu fais), coche la case "Utiliser le Makefile suivant etc...", et tu fais pointer ce champ vers le makefile créé à la suite de l'appel à qmake.
-
J'ai essayer d'indiquer le makefile généré par qmake. J'ai maintenant l'erreur suivante
Cannot find file 'images/copy.png'
*** [release\qrc_mdi.cpp] Error 1
bizarre...
-
As-tu bien un répertoire en dessous de celui contenant le .pro s'appellant "images" et contenant copy.png?
-
effectivement je ne l'ai pas mais comment pourrais-je l'avoir alors ?
-
Ben, je l'ai dans le répertoire de l'exemple:
C:\Qt-4.2.2\examples\mainwindows\mdi\images\copy.png (et aussi dans la 4.1.3)
Si tu ne l'as pas, c'est que ton archive de Qt est incompléte, je vois pas d'autres raisons :/
-
Sorry j'avais pas regardé ou il fallait. J'ai donc bien le fichier copy.png au bon endroit
-
Bon, je sais plus où tu en est :P
Je t'ai indiqué où le trouver, mais est-ce que tu compiles bien dans ce répertoire là? (enfin, juste au dessus de images ;))
-
oui j'ai bien le répertoire c'est bon. je compile comme tu m'as suggéré avec le makefile généré par qmake.
J'ai maintenant une nouvelle erreur: cannot find -lqtmaind
-
On avance...
Ca c'est parce que Qt n'est compilé qu'en mode release. Tu peux soit compiler en mode release, soit construire les libs de debug.
Pour construire les libs de debug, et si j'en crois Qt forum, tu aurais un fichier qtvars.bat dans le répertoire bin de Qt. Il te suffirait de l'appeller avec cet argument: compile_debug.
Si ce n'est pas ça, tente de te mettre à la racine de Qt et tape:
qmake && mingw32-make debug
-
Je n'arrive pas à effectuer la commande compile_debug sur le fichier qtvars.bat. J'ai ensuite fait la commande qmake && mingw32-make debug qui s'est correctement effectuée
mais l'erreur persiste
-
Et tu as quoi comme lib maintenant dans Qt\lib? Est-ce que tu as bien QtGui4.dll, QtGui4d.dll et toute les dlls en double à part ce 'd'?
-
dans Qt\lib j'ai un libGtGui4.a un QtGui.prl. Tu parles peut etre du répertoire bin dans ce cas j'ai bien QtGui4.dll, mais pas QtGui4d.dll
-
Dans ce cas, la compilation debug des libs Qt ne s'est pas bien passée.
Bon, alors, on va reprendre de 0, j'espère que t'as un peu de temps, ça va être long :D
0. met le répertoire bin de mingw dans ton path utilisateur (si mingw32-make n'est toujours pas connu en dehors de dev-cpp, faut passer par là et te delogger/relogger, voire redémarrer si tu modifies le path système)
1. ouvre une ligne de commande à la racine de Qt
2. tape configure -debug-and-release <suivi des autres options que tu veux>
3. si le configure s'est bien passé, tu peux taper mingw32-make, et c'est parti
-
Ok j'ai exécuter ces quelques lignes. Maintenant lorsque je compile, il me met:
Entering directory `C:/Documents and Settings/...
Nothing to be done for `all'.
Leaving directory `C:/Documents and Settings/...
puis ça s'arrete
-
Oui, les espaces posent problèmes là. Met le dans un rep sans espace et tout ira mieux :)