Re: g++ et stl (etait Qt...)

Page principale

Répondre à ce message
Auteur: Francois-Xavier Kowalski
Date:  
À: ML Guilde
Nouveaux-sujets: Re: g++ et stl: solution, Re: g++ et stl
Sujet: Re: g++ et stl (etait Qt...)
Samuel Hornus wrote:

>Frederic wrote:
>
>
>>En fait mon probleme se situe un peu avant cela. Les sources que j'essaye
>>de compiler font appel a une methode find() qui est un algorithme de la
>>stl, qui retourne un iterateur sur un conteneur. Or, avec g++-2.95, cette
>>methode est inconnue. Voila pourquoi j'etais passe sur la version 3.0 (le
>>source est developpe par un gars sur une Debian unstable).
>>
>>Y a-t-il une possibilite pour que cette methode find() puisse etre compilee
>>avec gcc-2.95 ?
>>
>>
>
>Euh... c'est tres curieux ce que tu ecris la !
>J'ai jamais eu de problemes avec la STL et gcc 2.95.
>


A compter de gcc-3.x, la specification du namespace "std::" est
obligatoire. Elle etait implicite auparavant. Si Frederic ne veut pas
qualifier tous ses appels a des conteneurs, il peut mettre:

#if defined(__GNUG__) && (__GNUC__ >= 3)
using namespace std;
#endif

avant d'inclure un quelconque fichier de la libstdc++.

>Avec quel type de conteneur utilises tu find() ?
>


La reponse est identique qq soit le conteneur.

>La STL est implementee en template : entre autres, il n'y a pas de lib,
>gcc recompile ce dont il a besoin a chaque fois que tu compiles un fichier
>source.
>


Tu en es bien sur? A quoi sert cette librarie, alors... :-)

ls -l /usr/lib/libstdc++*
-rwxr-xr-x    1 root     root      1144368 May 30  2002 
/usr/lib/libstdc++-2-libc6.1-1-2.9.0.so
-rw-r--r--    1 root     root       419066 May 30  2002 
/usr/lib/libstdc++-3-libc6.2-2-2.10.0.a
-r-xr-xr-x    1 root     root       401284 May 30  2002 
/usr/lib/libstdc++-3-libc6.2-2-2.10.0.so
lrwxrwxrwx    1 root     root           30 Feb  8 17:21 
/usr/lib/libstdc++-libc6.1-1.so.2 -> libstdc++-2-libc6.1-1-2.9.0.so
lrwxrwxrwx    1 root     root           30 Apr 13 14:31 
/usr/lib/libstdc++-libc6.2-2.a.3 -> libstdc++-3-libc6.2-2-2.10.0.a
lrwxrwxrwx    1 root     root           31 Feb  8 17:21 
/usr/lib/libstdc++-libc6.2-2.so.3 -> libstdc++-3-libc6.2-2-2.10.0.so
lrwxrwxrwx    1 root     root           20 Feb  8 17:21 
/usr/lib/libstdc++.so.2.7.2 -> libstdc++.so.2.7.2.8
-rwxr-xr-x    1 root     root      1025344 May 30  2002 
/usr/lib/libstdc++.so.2.7.2.8
lrwxrwxrwx    1 root     root           18 Feb  8 17:21 
/usr/lib/libstdc++.so.2.8 -> libstdc++.so.2.8.0
-rwxr-xr-x    1 root     root       375776 May 30  2002 
/usr/lib/libstdc++.so.2.8.0
lrwxrwxrwx    1 root     root           22 Feb  8 17:21 
/usr/lib/libstdc++.so.2.9 -> libstdc++.so.2.9.dummy
-rwxr-xr-x    1 root     root         5428 May 30  2002 
/usr/lib/libstdc++.so.2.9.dummy
lrwxrwxrwx    1 root     root           18 Feb  8 16:59 
/usr/lib/libstdc++.so.5 -> libstdc++.so.5.0.1
-rwxr-xr-x    1 root     root      4181584 Sep  4  2002 
/usr/lib/libstdc++.so.5.0.1


>Donc le changement de compilo n'y changera rien, sauf s'il met a jour
>les fichiers .h de la STL. Mais c'est quand meme tres curieux que ca n'ai
>pas marche avec 2.95.
>

C'est effectivement le cas: la librarie standard a change en 2.x & 3.x.

La version 2.x etait un dont de HP & SGI. Celle de 3.x a ete re-ecrite
de zero. Elle est desormais presque ANSI C++.

Ajoute cela u fait que l'implementation en C sous-jacente aux classes a
ete re-ecrite elle aussi & pour finit que le "symbol mangling" a lui
aussi ete revu (encore une fois pour se rapprocher de ANSI C++, mais
cette fois de l'ABI), et tu obtient 2 compilateurs aussi incompatibles
entre eux que c'est possible.

Pour finir: Tu peux considerer 3.0 comme un compilateur intermediaire,
qui est affecte de nombreux bugs qui n'ont ete fixes qu'en 3.2. Et comme
3.0 est aussi incompatible avec 3.2 (ils vont se calmer de ce point de
vue, ..si, si), tu n'as plus qu'a basculer de 3.0 en 3.2.

References:
http://gcc.gnu.org/libstdc++/
http://gcc.gnu.org/gcc-3.2/changes.html
http://gcc.gnu.org/gcc-3.0/caveats.html
http://www.intel.com/software/products/compilers/techtopics/LinuxCompilersCompatibility702.pdf

A+

--
Francois-Xavier 'FiX' KOWALSKI