[Debian] HelloWorld en Qt qui ne compile pas...

HelloWorld en Qt qui ne compile pas... [Debian] - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 21-06-2003 à 02:44:07    

C'est le premier tutoriel sur le site de Trolltech et je n'arive même pas à le compiler sur ma Debian SID :sweat:
http://doc.trolltech.com/3.1/tutorial1-01.html
 
 
Le code:

Code :
  1. /****************************************************************
  2. **
  3. ** Qt tutorial 1
  4. **
  5. ****************************************************************/
  6. #include <qapplication.h>
  7. #include <qpushbutton.h>
  8. int main( int argc, char **argv )
  9. {
  10.     QApplication a( argc, argv );
  11.     QPushButton hello( "Hello world!", 0 );
  12.     hello.resize( 100, 30 );
  13.     a.setMainWidget( &hello );
  14.     hello.show();
  15.     return a.exec();
  16. }


 
 
Je l'ai enregistré dans le fichier main.cpp.
Pour le compiler, je fais:


qmake -project
qmake
make


 
Et c'est le drame, j'obtiens celà au make:


g++ -c -pipe -Wall -W -O2  -DQT_NO_DEBUG -I/usr/share/qt3/mkspecs/default -I. -I. -I/include -o main.o main.cpp
main.cpp:7:26: qapplication.h : Aucun fichier ou répertoire de ce type
main.cpp:8:25: qpushbutton.h : Aucun fichier ou répertoire de ce type
main.cpp: Dans function « int main(int, char**) »:
main.cpp:13: error: `QApplication' undeclared (first use this function)
main.cpp:13: error: (Each undeclared identifier is reported only once for each
   function it appears in.)
main.cpp:13: error: erreur d'analyse syntaxique before `(' token
main.cpp:15: error: `QPushButton' undeclared (first use this function)
main.cpp:16: error: `hello' undeclared (first use this function)
main.cpp:18: error: `a' undeclared (first use this function)
main.cpp:12: attention : unused parameter `int argc'
main.cpp:12: attention : unused parameter `char**argv'
make: *** [main.o] Erreur 1


 
 
Alors, j'ai essayé d'écrire cela pour les include:

Code :
  1. #include <qt3/qapplication.h>
  2. #include <qt3/qpushbutton.h>


puisque les headers de Qt sont dans /usr/include/qt3/.
 
Après avoir refait les qmake comme avant, j'obtiens au make ceci:


g++ -c -pipe -Wall -W -O2  -DQT_NO_DEBUG -I/usr/share/qt3/mkspecs/default -I. -I. -I/include -o main.o main.cpp
Dans le fichier inclus à partir de /usr/include/qt3/qobjectdefs.h:42,
          à partir de /usr/include/qt3/qwindowdefs.h:43,
          à partir de /usr/include/qt3/qwidget.h:42,
          à partir de /usr/include/qt3/qdesktopwidget.h:40,
          à partir de /usr/include/qt3/qapplication.h:42,
          à partir de main.cpp:7:
/usr/include/qt3/qglobal.h:710:21: qconfig.h : Aucun fichier ou répertoire de ce type
/usr/include/qt3/qglobal.h:773:23: qfeatures.h : Aucun fichier ou répertoire de ce type
make: *** [main.o] Erreur 1


 
J'ai été voir, et j'ai bien qconfig.h et qfeatures.h (ainsi que les autres) dans /usr/include/qt3/ donc ils sont là !
 
 
C'est balot de s'arrêter à la première étape d'un tutoriel  :(
Je ne connaitrais jamais Qt  :/


Message édité par eL_Shaman___ le 21-06-2003 à 02:46:14
Reply

Marsh Posté le 21-06-2003 à 02:44:07   

Reply

Marsh Posté le 21-06-2003 à 08:47:16    

Avant de compiler, tape :  
 
export QTDIR=/usr/share/qt/
export QMAKESPEC=linux-g++


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

Marsh Posté le 21-06-2003 à 14:42:13    


export QTDIR=/usr/share/qt/
export QMAKESPEC=linux-g++
qmake -project
qmake
make
make: *** Pas de règle pour fabriquer la cible « /usr/share/qt/3/mkspecs/linux-g++/qmake.conf », nécessaire pour « Makefile ». Arrêt.


 
Ça ne fonctionne pas  :/
 
Mais j'ai vu que j'avais un dossier /usr/share/qt3/ avec tous le fichier cité ci-dessus.
 
Alors autre tentative:


export QTDIR=/usr/share/qt3/
export QMAKESPEC=linux-g++
qmake -project
qmake
make
g++ -c -pipe -Wall -W -O2  -DQT_NO_DEBUG -I/usr/share/qt3//mkspecs/linux-g++ -I. -I. -I/usr/share/qt3//include -o main.o main.cpp
g++  -o HelloWorld main.o   -L/usr/share/qt3//lib -L/usr/X11R6/lib -lqt -lXext -lX11 -lm
/usr/bin/ld: ne peut trouver -lqt
collect2: ld a retourné 1 code d'état d'exécution
make: *** [HelloWorld] Erreur 1


 
 
Ronjudju ! :fou:

Reply

Marsh Posté le 21-06-2003 à 18:52:22    

ou est le rapport avec debian ?  :heink:

Reply

Marsh Posté le 21-06-2003 à 19:03:22    

Lionz a écrit :

ou est le rapport avec debian ?  :heink:  


 
Que c'est sur Debian ?
 
Qu'à priori, ça pourrait fonctionner sur autre chose qu'une Debian puisque je suis la méthode...
 
 
 
Si tu sais d'où vient le problème, tu expliques, sinon...

Reply

Marsh Posté le 21-06-2003 à 20:10:35    

Le probleme c'est que le linkeur ne trouve pas les lib qt. Essaye avec -lqt-mt a la place de -lqt.
 
Par contre utiliser qmake pour un seul fichier, c'est pas tres utile.

Reply

Marsh Posté le 22-06-2003 à 18:44:35    

Elche a écrit :

Le probleme c'est que le linkeur ne trouve pas les lib qt. Essaye avec -lqt-mt a la place de -lqt.
 
Par contre utiliser qmake pour un seul fichier, c'est pas tres utile.


 
 
En effet, j'ai mis cela dans le Makefile généré et j'ai fait les export avec « qt3 » avant et ça a compilé parfaitement.
 
Pour cela, je suis content :)
 
 
Mais, ce n'est pas normal que qmake ne génère pas un Makefile correct.
De plus, j'ai essayé de faire une appli bidon dans Kdevelop qui affiche juste un cadre et ce que j'ai obtenu à la compilation dans Kdevelop, c'est que tous les headers de Qt étaient absents  :/
 
J'en reviens donc à me demander si les paquets Debian n'ont pas un problème, si certaines variables ne sont pas initialisées, si les fichiers sont mal placés ou je ne sais quoi encore.


Message édité par eL_Shaman___ le 22-06-2003 à 18:45:07
Reply

Marsh Posté le 22-06-2003 à 19:48:48    

J'ai finalement trouvé un moyen en lisant ce rapport de bug:
http://bugs.debian.org/cgi-bin/bug [...] bug=180326
 
 
 
Juste après avoir exécuté « qmake -project », il faut modifier le fichier *.pro en y ajoutant la ligne:
 
CONFIG += thread
 
 
Ensuite, le qmake et le make fonctionne.
 
D'après ce que j'ai compris, il existe deux types de bibliothèques pour Qt3: threadées et non threadées.
 
J'utilise celles qui sont threadées (« -mt » dans le nom de leur paquet), donc je dois ajouter ce paramètre car par défaut, sur Debian, celles utilisées sont non threadées.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed