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