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

  FORUM HardWare.fr
  Programmation
  C++

  Erreur de compilation et options de compilation

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Erreur de compilation et options de compilation

n°877129
nathan_g
Posté le 19-10-2004 à 16:29:07  profilanswer
 

Voila,
 
Je ne suis pas administrateur sur ma machine et j'ai voulu faire joujou avec gcc en installant sur mon compte une version plus récente (la 3.3.2) à l'adresse ~/toto et éviter d'utiliser l'ancienne (la 2.96).
 
Le problème c'est que je me retrouve avec deux programmes qui ne sont plus compilables simultanément sous les deux versions, alors que précédemment j'arrivais à les compiler au moins sous l'ancienne.
 
Le premier est compilable avec la 2.96 et pas la 3.3.2 et fait appel à Qt :
 
#include <qapplication.h>
#include <qlabel.h>
 
int main( int argc, char **argv )
{
    QApplication myapp( argc, argv );
    QLabel* myLabel = new QLabel("Hello World!",0,"my hello" );
    myLabel->setGeometry(400,300,120,90);
    myapp.setMainWidget(myLabel);
    myLabel->show();
    return myapp.exec();
}
 
avec la version 2.96, la commande :
 
g++ -O -o main main.C -I/repqt/include -L/repqt/lib -lqt  
 
fonctionne et me donne le résultat attendu (repqt fait référence au chemin où j'ai installé Qt).  
 
Si j'essaye d'utiliser la version 3.3.2 (remplacement de g++ par l'adresse du binaire lançant l'éxécution du compilateur) que j'ai installé, la même commande donne le résultat :
 
/tmp/ccrBgMqt.o: In function `main':
/tmp/ccrBgMqt.o(.text+0x27): undefined reference to `QApplication::QApplication[in-charge](int&, char**)'
/tmp/ccrBgMqt.o(.text+0x4c): undefined reference to `QString::QString[in-charge](char const*)'
/tmp/ccrBgMqt.o(.text+0x70): undefined reference to `QLabel::QLabel[in-charge](QString const&, QWidget*, char const*, unsigned)'
/tmp/ccrBgMqt.o(.text+0x8a): undefined reference to `QString::shared_null'
....
/tmp/ccrBgMqt.o(.gnu.linkonce.r._ZTV6QGList+0xc): undefined reference to `QGList::clear()'
/tmp/ccrBgMqt.o(.gnu.linkonce.r._ZTV6QGList+0x10): undefined reference to `QGList::~QGList [in-charge]()'
/tmp/ccrBgMqt.o(.gnu.linkonce.r._ZTV6QGList+0x14): undefined reference to `QGList::~QGList [in-charge deleting]()'
....
collect2: ld returned 1 exit status
 
(les ... correspondent à des lignes similaires).
 
D'où vient l'erreur ? Est ce qu'il manque une ligne à la compilation ? En fait, est ce qu'il faut que je rajoute qqch pour permettre au compilateur de trouver l'adresse des librairies Qt (pourtant une commande de compilation écrite de manière similaire fonctionnait avec la précédente version de g++) ? J'espère également que mes variables d'environnement, notamment LD_LIBRARY_PATH, sont bien définies.
 
L'autre programme que j'ai est encore plus simple :
 
#include <math.h>
#include <iostream>
 
using namespace std;
 
int main()
{
....
cout << round (5.6) << endl;
....
}
 
En utilisant le précédent compilateur (2.96), la fonction round n'est bizarrement pas trouvée :
 
main.C:12: 'round' undeclared (first use this function)
 
avec la commande : g++ -O -o main main.C
 
le compilateur 3.3.2 ne pose pas de problème et donne le résultat attendu.
 
Vous l'aurez peut-être compris, en fait, le vrai programme que je cherche à utiliser fait appel à Qt et à la fonction round. Je ne parviens pas à le compiler avec l'une ou l'autre des versions de mon compilateur.
 
D'avance merci de vos réponse à ce (long) message,
 
Nathan g

mood
Publicité
Posté le 19-10-2004 à 16:29:07  profilanswer
 

n°877130
nathan_g
Posté le 19-10-2004 à 16:30:03  profilanswer
 

correction (problème d'image) :
 
il faut lire :
 
main.C : 12 : 'round' undeclared (first use this function)

n°877148
cris56
Posté le 19-10-2004 à 16:37:15  profilanswer
 

c'est possible que tu n'ais pas round, c'est pas dans le standard (moi j'ai jamais vu)
 
mais ca se fais facilement avec floor/ceil
j'ai deja vu rint aussi mais c'est pas standard

n°877167
nathan_g
Posté le 19-10-2004 à 16:46:22  profilanswer
 

OK, je suis d'accord que ça n'est peut-être pas standard mais ce qui m'inquiète c'est que avec mon compilateur g++3.3.2, cette fonction est reconnue sans problème (et la norme n'a pas du bcp changer).
 
Je pense plutot être passé à coté de qqch quand j'ai essayé de compiler avec la version g++2.96. D'autant qu'il y qqs jours cela fonctionnait encore avec g++2.96, avant que je ne m'amuse à installer une version plus récente de g++.

n°877249
HelloWorld
Salut tout le monde!
Posté le 19-10-2004 à 17:55:06  profilanswer
 

Utilise les balises [cpp] la prochaine fois plz.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°877261
Lam's
Profil: bas.
Posté le 19-10-2004 à 18:13:08  profilanswer
 

L'ABI a changé entre g++ 2.96 et 3.X.  
 
Le linker ne trouve donc pas les symboles, car la décoration des noms n'est pas la même.
 
Solution: soit tu compiles tout avec la 2.96, soit tu compiles tout avec la 3.3.2 (y compris tes libs QT).
 
 

n°877266
nathan_g
Posté le 19-10-2004 à 18:24:02  profilanswer
 

Excuse moi, mais je suis novice.
 
Est ce que tu parles de mon problème avec round ou avec Qt ?
 
Qu'est ce que l'ABI ?
Que sont ces symboles que l'édition de lien ne retrouvent pas ?
 
Et si j'essaye de tout recompiler avec la 3.3.2, y compris Qt, ce sera pour avoir les longs messages d'erreur dont je t'ai parlé. En quoi consisterait le fait de tout recompiler, y compris Qt, pour toi ? N'est ce pas ce que je fais déja ? Comment procéder ?
 
Excusez d'avance mes questions de débutant.

n°877272
Lam's
Profil: bas.
Posté le 19-10-2004 à 18:34:31  profilanswer
 

Déjà, tu lis ça:
 
http://www.redhat.com/docs/manuals [...] ility.html
 
Et sinon, mon truc s'addresse à tes problèmes de "longs messages d'erreurs". Recompiler QT, ça veut dire downloader QT, et recompiler le tout, et pas seulement ton appli. Mais je ne peux pas te dire si c'est la solution à faire ici...
 
Tu devrais poser la question aussi sur le forum OS Alternatifs, ils sauront mieux que moi comment faire tourner simultanément plusieurs versions des libs QT.  


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

  Erreur de compilation et options de compilation

 

Sujets relatifs
Java Compilation ?? Min et Max ?Valeur de retour d'une fonction si erreur
[wxwidget] Problème de compilation sous linuxErreur htaccess quand ErrorDocument + RewriteRule
multi-compilation avec gcc sous VisualC++ 6Erreur SQL
Compilation de source C+OpenGL sous WindowsSupprimer le bip de compilation sous VC++ 6
j'en peu plus c'est quoi l'erreur dans mon prog[devcpp] options d'optimisation ne change rien
Plus de sujets relatifs à : Erreur de compilation et options de compilation


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