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

Répondre à