STL

Alexis Cousein al at brussels.sgi.com
Tue Dec 12 15:56:42 CET 2000



Christophe Geuzaine wrote:
> 
> Bonjour,

Mieux vaut addresser ceci a wcs at brussels.sgi.com (et demander de le
logger comme "call" officiel.

Est-ce que la ligne de compilation comprend -LANG:std ? Si oui, utilisez
vous un "use namespace std;"? D'ou vient la STL (la STL standard dans
/usr/include/CC, une STL 3.3 downloade a part dans
/usr/include/STL-3.3)? Quelle est la ligne de compilation complete? Avez
vous la source (et est-ce que la definition des "headers" est comme en
standard ANSI/LANG:std, ou en ancienne notation xxx.h)? Est-ce bien une
machine avec l "execution Environment" 7.3, et pas seulement le
compilateur 7.3? etc. etc.

Ceci dit, meme sans details, j'ai ma petite idee...voir ci-dessous.

Le compilateur 7.3 est plutot strict (surtout si l'on utilise
l'environnement ANSI) -- gcc se permet d'utiliser les bibliotheques
ANSI-like tel quel (sans flag) et utilise des "use namspace std;"
implicites (il est interdit par le standard de polluer la namespace
globale, mais...).

Etre parenthese ,vous trouverez gmake, gcc, stdlibc++ etc. sur
freeware.sgi.com, au cas ou la vitesse du code n'est pas critique et que
vous avez un programme Linux a dupliquer.
> 
> J'ai un petit probleme de compilation pour un code C++ utilisant (un
> tout petit peu : c'est un premier test) la STL. Le code se compile sans
> probleme sous Tru64/HP-UX/AIX/SunOs/Linux (soit avec le compilateur
> natif, soit avec g++), mais le compilateur C++ (7.30) sous IRIX (6.5.8)
> n'arrive pas a linker l'executable:
> 
> ld: ERROR   33 : Unresolved text symbol "_Rb_tree<char*,pair<char
> *const,File_Position>,_Select1st<pair<char *const,File_Position>
> >,ltstr,__default_alloc_template<(const int)0,(const int)0> 
> >::find(char *const&)" -- 1st referenced by lib/libParser.a(FunctionManager.o)

Aha, une .a -- Vous savez surement que pour faire une instantiation des
"templates" necessaire, il *faut* creer l'archive non pas avec "ar",
mais avec CC -ar (avec tous les .o que l'on veut dans l'archive, meme si
l'on ne remplace qu'un composant)? Voir man CC, section -ar. 

D'autres compilateurs instantient differement dans les .o (par exemple,
-ptall instantie toujours tout ce qui bouge sur les compilateurs
MIPSPro, mais ce n'est guere ce que je vous conseille...).

A voir la link line, d'ailleurs, vous avez les classes STL dans la
namespace globale, d'une facon ou d'une autre.