Parfait, merci pour ces explications qui d�passent mes esp�rances. Comme
quoi le support peut �tre tout aussi bon s'il est gratuit :)

Quant au probl�me, j'esp�re juste que ces corrections vont s'espacer, parce
que finalement si �a n'arrive qu'une fois toutes les cinq versions de gcc,
je saurais me d�merder pour �tre � jour. Surtout en consid�rant le prix du
compilateur...





On 2003.07.18 19:42 Marc Mongenet wrote:
> B . Carrupt wrote:
> > Bonjour,
> > 
> > J'ai compil� sur ma RH7.2 des librairies au format ELF, et je me suis
> fait
> > un script qui les copie dans le r�pertoire /usr/lib/mylib.
> > 
> > Lorsque je cr�e un ex�cutable qui utilise ces librairies sur une RH7.2
> ou
> > RH7.3, �a fonctionne tr�s bien, mais par contre, sur une RH8.0, �a ne
> > fonctionne pas : la librairie est bien trouv�e mais pas les m�thodes
> (ne
> > trouve aucune m�thod, pas m�me le constructeur et le destructeur).
> > 
> > Par contre, d�s que je recompile mes librairies sur RH8.0, �a
> fonctionne.
> 
> Cela vient sans doute du fait d'un changement de version de GCC.
> Les fichiers objets compil�s avec G++ 3.2.x ne sont pas compatibles
> avec les versions pr�c�dentes. Sp�cifiquement, c'est l'ABI
> (Application Binary Interface) qui n'est pas compatible.
> <http://gcc.gnu.org/gcc-3.2/c++-abi.html>
> L'ABI comprend l'arrangement des variables dans les structures,
> la mani�re d'appeler les fonctions (virtuelles), la mise en oeuvre
> de l'h�ritage multiple... voir
> <http://developers.sun.com/tools/cc/articles/CC_abi/CC_abi_content.html>
> 
> L'incompatibilit� la plus courante est dans le "name mangling"
> (d�coration des noms de fonction). L'avantage de cette incompatibilit�
> est qu'elle est d�tect�e par le linker (il ne trouve pas les fonctions),
> plut�t que par un crash � l'ex�cution.
> 
> Les noms de fonction sont d�cor�s avec le type des param�tres,
> ce qui donne un nom unique � chaque fonction, m�me surcharg�e.
> Ainsi le linker s'y retrouve, pour autant que l'algorithme de
> d�coration employ� soit le m�me pour tous les objets li�s entre
> eux. Exemple :
> Function              Mangled Name
> float f(float)                __1cBf6Ff_f_
> int f(int)            __1cBf6Fi_i_
> int T::f(int)                 __1cBTBf6Mi_i_
> int T::f(char*)       __1cBTBf6Mpc_i_
> 
> Les variations de "name mangling" de G++ ne sont pas introduites
> gratuitement. Elles r�sultent de corrections de bugs et sont
> souvent n�cessaires pour supporter le C++ standard (avec notamment
> ses namespaces, ses exceptions ou ses templates complexes).
> 
> > Est-ce que quelqu'un peut me dire si c'est normal, et si oui, s'il y a
> un
> > moyen de garder la compatibilit� entre plusieurs version de RH, voire
> entre
> > une version de RH et une version plus r�cente de Suze ou Mandrake ou
> > Quesaije ?
> 
> Je pense que non, sinon ces �volutions n'auraient pas �t�
> n�cessaires. Mais une ABI multi-vendeur se stabilise
> <http://www.codesourcery.com/cxx-abi/>
> Ces probl�mes devraient donc s'espacer. En outre il sera
> possible de lier des fichiers objets de compilateurs C++
> diff�rents, �a progresse !
> 
> Marc
> 
> _______________________________________________
> gull mailing list
> [EMAIL PROTECTED]
> http://lists.alphanet.ch/mailman/listinfo/gull
> 

_______________________________________________
gull mailing list
[EMAIL PROTECTED]
http://lists.alphanet.ch/mailman/listinfo/gull

Répondre à