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