Dans le cas présent, il s'agit d'un problème au niveau du polymorphisme.
Le polymorphisme s'appuye sur des fonctions virtuelles, qui n'ont pas d'adresse définie, ou redéfinissable. En conséquence, il faut passer par une table de pointeurs de fonctions (la vtable). Le C++ défini un ordre précis dans lequel doit être lue cette table (comme les éléments d'une pile sont ajoutés du heut vers le bas). Or, g++ rangeait les adresses dans le sens opposé à celui de la norme, et ce fut changé dans la version 3.0
C'est la raison principale qui explique l'incompatibilité bianaire. J'ai fait court, pas un cours ;) Donc ceux qui ne programment pas .. ditent-vous juste que g++ ancienne version faisait fonctionner les applications dans un sens, et que la nouvelle version les fait fonctionner dans l'autre.
[^] # Re: Compatibilité de l'ABI C++
Posté par LupusMic (site web personnel, Mastodon) . En réponse à la dépêche GCC 3.2.3 est sorti. Évalué à 10.
Le polymorphisme s'appuye sur des fonctions virtuelles, qui n'ont pas d'adresse définie, ou redéfinissable. En conséquence, il faut passer par une table de pointeurs de fonctions (la vtable). Le C++ défini un ordre précis dans lequel doit être lue cette table (comme les éléments d'une pile sont ajoutés du heut vers le bas). Or, g++ rangeait les adresses dans le sens opposé à celui de la norme, et ce fut changé dans la version 3.0
C'est la raison principale qui explique l'incompatibilité bianaire. J'ai fait court, pas un cours ;) Donc ceux qui ne programment pas .. ditent-vous juste que g++ ancienne version faisait fonctionner les applications dans un sens, et que la nouvelle version les fait fonctionner dans l'autre.
Je peux pas faire plus clair :o)