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
