Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1627 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [C++ / Qt4] Problème de link avec Visual C++ 2005

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C++ / Qt4] Problème de link avec Visual C++ 2005

n°1619365
grostony
Posté le 05-10-2007 à 00:08:40  profilanswer
 

Salut,
 
Je commence à tatter un peu de la programmation qt et j'essaye de faire un prog utilisant QtSql, pour m'entrainer je suis parti de la base du QHelloWorld et j'y ajoute du code au grai de mes envies :D, j'ai donc essayé de faire quelque chose avec un QSqlQuery, j'ai donc pour l'instant simplement ajouté un

Code :
  1. #include <QSqlQuery>


au début de mon fichier main.cpp et dans le code de la fonction main(...) simplement:

Code :
  1. QSqlQuery query;


Je tente la compile et là erreur de link:

Citation :

Actions de projet Makefile en cours
Microsoft (R) Program Maintenance Utility Version 8.00.50727.42
Copyright (C) Microsoft Corporation. Tous droits r
 "C:\Program Files\Microsoft Visual Studio 8\VC\bin\nmake.exe" -f Makefile.Debug
Microsoft (R) Program Maintenance Utility Version 8.00.50727.42
Copyright (C) Microsoft Corporation. Tous droits r
 cl -c -nologo -Zm200 -GS -Od -Zi -Gm -MDd -GR -EHsc -W3 -DUNICODE -DQT_LARGEFILE_SUPPORT -DWIN32 -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE -DQT_DLL -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -I"e:\qt4\include\QtCore" -I"e:\qt4\include\QtCore" -I"e:\qt4\include\QtGui" -I"e:\qt4\include\QtGui" -I"e:\qt4\include" -I"." -I"e:\qt4\include\ActiveQt" -I"debug" -I"." -I"e:\qt4\mkspecs\default" -Fodebug\ @C:\DOCUME~1\gluttony\LOCALS~1\Temp\nm94.tmp
main.cpp
 link /LIBPATH:"e:\qt4\lib" /NOLOGO /DEBUG /SUBSYSTEM:WINDOWS /incremental:no /OUT:"debug\HelloWorldQt.exe" @C:\DOCUME~1\gluttony\LOCALS~1\Temp\nm95.tmp
main.obj : error LNK2019: symbole externe non résolu "__declspec(dllimport) public: __thiscall QSqlDatabase::~QSqlDatabase(void)" (__imp_??1QSqlDatabase@@QAE@XZ) référencé dans la fonction __unwindfunclet$_main$0
main.obj : error LNK2019: symbole externe non résolu "__declspec(dllimport) public: __thiscall QSqlQuery::~QSqlQuery(void)" (__imp_??1QSqlQuery@@QAE@XZ) référencé dans la fonction _main
main.obj : error LNK2019: symbole externe non résolu "__declspec(dllimport) public: __thiscall QSqlQuery::QSqlQuery(class QString const &,class QSqlDatabase)" (__imp_??0QSqlQuery@@QAE@ABVQString@@VQSqlDatabase@@@Z) référencé dans la fonction _main
main.obj : error LNK2019: symbole externe non résolu "__declspec(dllimport) public: __thiscall QSqlDatabase::QSqlDatabase(void)" (__imp_??0QSqlDatabase@@QAE@XZ) référencé dans la fonction _main
debug\HelloWorldQt.exe : fatal error LNK1120: 4 externes non résolus
NMAKE : fatal error U1077: '"C:\Program Files\Microsoft Visual Studio 8\VC\bin\link.EXE"'á: code retour '0x460'
Stop.
NMAKE : fatal error U1077: '"C:\Program Files\Microsoft Visual Studio 8\VC\bin\nmake.exe"'á: code retour '0x2'
Stop.
Project : error PRJ0019: Un outil a retourné un code d'erreur à partir de "Actions de projet Makefile en cours"


Je ne comprend pas pourquoi ça plante, dans le link il y a bien "e:\qt4\lib" qui comprend la librairie QtSql4.lib
 
Si quelqu'un a une idée de ce que je fais de travers ça serait cool car là je n'arrive pas à voir.
J'ai vu dans un Makefile d'un exemple Qt qu'il y avait à un endroit un -DQT_SQL_LIB, où peut-on le rajouter dans le projet Visual C++ 2005?
 
Merci, @+.

mood
Publicité
Posté le 05-10-2007 à 00:08:40  profilanswer
 

n°1619377
IrmatDen
Posté le 05-10-2007 à 02:04:07  profilanswer
 

Salut,
 
Il suffit d'ajouter QT += sql à ton .pro et tout le module sql sera disponible.
 
Edit: et si tu n'utilises pas de .pro, alors il faut que tu ajoutes QtSql4d.lib et QtSql4.lib à la config du lieur (respectivement pour la compilation en debug et release; si tu n'as compilé Qt qu'en release, tu mets juste QtSq4.lib aux 2 types de config et zou)


Message édité par IrmatDen le 05-10-2007 à 02:47:20
n°1619393
grostony
Posté le 05-10-2007 à 09:00:56  profilanswer
 

Ok, merci,
 
J'utilise bien un .pro mais quand je le modifie manuellement, VC++ 2005 en regénère un manuellement, pour l'ajout de lib au linker je n'arrive pas à trouver où, mais dans tous les cas vu que le répertoire "e:\qt4\lib" est défini (et bien reconnu car il voit la lib QtGui4.lib pour QApplication et QPushButton) je pense que la lib est bien vue, enfin je peux toujours essayer de les ajouter quand même si je trouve. Tu sais où sait pour VC++ 2005? Je savais pour VC++6 mais là pas trouvé.
 
Mais je pense plus que le problème vient du -DQT_SQL_LIB qui n'est pas présent, d'ailleurs pour la partie Gui on voit bien dans la commande que -DQT_GUI_LIB est présent. Et pareil que pour le "QT += sql", si je rajoute manuellement le -DQT_SQL_LIB dans le makefile, il est regénéré par VC++ 2005 et donc les modifications sont perdues.
 
Help please :d.
@+

n°1619522
IrmatDen
Posté le 05-10-2007 à 11:19:52  profilanswer
 

grostony a écrit :

Ok, merci,
 
J'utilise bien un .pro mais quand je le modifie manuellement, VC++ 2005 en regénère un manuellement, pour l'ajout de lib au linker je n'arrive pas à trouver où, mais dans tous les cas vu que le répertoire "e:\qt4\lib" est défini (et bien reconnu car il voit la lib QtGui4.lib pour QApplication et QPushButton) je pense que la lib est bien vue, enfin je peux toujours essayer de les ajouter quand même si je trouve. Tu sais où sait pour VC++ 2005? Je savais pour VC++6 mais là pas trouvé.


Ca c'est parce que tu as qmake -project dans ta ligne de build. Il ne faut surtout pas l'y mettre pour cette raison. Le qmake -project, tu le fais manuellement en cli dans le rep de ton projet. Après, tu ajoutes le .pro à l'arbo de ta solution dans VC pour l'avoir à portée de souris et le modifier sans galérer.
Dans les commandes de build:
> Build command line: qmake && nmake all
> Rebuild all: nmake distclean && nmake all
> Clean command line: nmake distclean
(Tu peux éventuellement remplacer distclean par clean, mais le premier à l'avantage d'aussi supprimer les makefiles générés, ce qui peut se révéler assez pratique dans certains cas ;))
 

grostony a écrit :

Mais je pense plus que le problème vient du -DQT_SQL_LIB qui n'est pas présent, d'ailleurs pour la partie Gui on voit bien dans la commande que -DQT_GUI_LIB est présent. Et pareil que pour le "QT += sql", si je rajoute manuellement le -DQT_SQL_LIB dans le makefile, il est regénéré par VC++ 2005 et donc les modifications sont perdues.


Les Makefiles sont générés par qmake [unfichier.pro]. Donc il faut résoudre à la source, ça ne sert *à rien* de se palucher des modifs de makefile à la mano à chaque génération.

n°1619604
grostony
Posté le 05-10-2007 à 12:38:29  profilanswer
 

Ok merci pour toutes ces infos (j'ai bien un qmake -project dans mes lignes de build/rebuild), je testerai ce soir en retrant chez moi.
@+

n°1619611
IrmatDen
Posté le 05-10-2007 à 12:44:19  profilanswer
 

Pardon, la phrase suivante n'était pas compléte:

IrmatDen a écrit :

Ca c'est parce que tu as qmake -project dans ta ligne de build.


[...] lorsque tu viens de créer ton projet.
 
Voilà :)

n°1619643
grostony
Posté le 05-10-2007 à 13:40:08  profilanswer
 

Bah en fait en partant d'un projet vide il n'y a rien dans la ligne de build (je crois car dans des tutos ils disent, de mettre ci et ça ici et là), c'est en glanant des infos (plus ou moins valables :d) que j'ai touvé ça, que j'ai mis manuellement et que la compilation à marché (pour le simple QHelloWorld).


Message édité par grostony le 05-10-2007 à 13:41:22
n°1619718
IrmatDen
Posté le 05-10-2007 à 14:37:12  profilanswer
 

Ce que je voulais dire (j'ai coupé le mauvais morceau :sweat:), c'est de taper ça en ligne de commande dans le répertoire de ton projet à sa création. Tu ajoutes une entrée au menu outil pour ouvrir une console dans le projet, et tu le feras sans même y penser au bout de 2 fois.

n°1619773
grostony
Posté le 05-10-2007 à 15:26:52  profilanswer
 

IrmatDen a écrit :

Ce que je voulais dire (j'ai coupé le mauvais morceau :sweat:), c'est de taper ça en ligne de commande dans le répertoire de ton projet à sa création.


Je ne sais pas si je te suis complètement là, tu veux dire, genre si mon projet est situé dans D:\Projets\QHelloWorld, lancer l'invité de commande MS DOS et tapper:

Citation :

C:\> d:
D:\> cd Projets\QHelloWorld
D:\Projets\QHelloWorld> cd <chemin vers le makefile (je ne sais plus s'il est à la racine du projet)>
D:\Projets\QHelloWorld\<...>> qmake -project


 

IrmatDen a écrit :

Tu ajoutes une entrée au menu outil pour ouvrir une console dans le projet, et tu le feras sans même y penser au bout de 2 fois.


Là je te suis encore moins, c'est dans le menu outils de VC++ 2005? Si oui comment faire.
 
Merci encore :d.


Message édité par grostony le 05-10-2007 à 15:46:36
n°1619821
IrmatDen
Posté le 05-10-2007 à 16:10:33  profilanswer
 

Pour rendre facilement la console à partir de VS:
1. Cliques sur Tools / External tools...
2. Ca t'ouvre une fenêtre avec la liste des outils non integrés à VS (d'où le nom external...)
3. CG sur Add
4. > Title: [le titre de l'outil ajouté] (par exemple "CLI in Solution directory" )
    > Command: cmd.exe
    > Arguments: [laisse vide]
    > Initial directory: utilise la valeur spéciale "$(SolutionDir)"
5. Ok
 
Ensuite, après création d'un projet, tu cliques sur ton outil nouvellement créer. Une console devrait s'ouvrir exactement dans le répertoire de ton .sln. Si c'est le répertoire racine de ton projet (disons donc "D:\Projets\QHelloWorld" ), tu y tapes: qmake -project && exit
Si tu as une arborescence particulière où le sln n'est pas le répertoire racine de ton projet (disons: "D:\Projets\QHelloWorld\build_systems\msvc2005" ), alors il te faudra remonter à la racine pour avoir ton .pro correct.
La raison étant que le qmake -project analyse le répertoire en cours + les sous-répertoires. Mais il ne remonte pas ;)

mood
Publicité
Posté le 05-10-2007 à 16:10:33  profilanswer
 

n°1619834
grostony
Posté le 05-10-2007 à 16:23:51  profilanswer
 

Oki doki, merci pour tout, j'essaye tout ça ce soir.
@+

n°1619922
grostony
Posté le 05-10-2007 à 18:41:33  profilanswer
 

magnifique, tout marche niquel avec tes conseils.
Merci encore.
@+

n°1619926
IrmatDen
Posté le 05-10-2007 à 18:55:50  profilanswer
 

De rien, enjoy ;)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [C++ / Qt4] Problème de link avec Visual C++ 2005

 

Sujets relatifs
Problème avec foreach !Problème taille police IE
[Résolu] Problème de compilation QtProbléme compilateur visual 2005
[Java, JSP, Servlet] Problème de sessionprobleme avec LocalConnection
Problème COMPILATION Code::Blockprobleme de endl
Plus de sujets relatifs à : [C++ / Qt4] Problème de link avec Visual C++ 2005


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR