2010-10-28 4 views
2

J'ai hérité d'une application qui lie à une bibliothèque qui PEUT avoir été construite avec gcc3. Ou peut-être avec le compilateur imagecraft. Cette information a maintenant disparu dans le champ de bits céleste et il me reste une librairie libXXX.a avec laquelle lier mon application. Je ne peux pas recompiler le libXXX.a car il nécessite certains en-têtes inconnus de la part de imagecraft et ailleurs qui, à un moment donné, ont pu être omniprésents dans mon environnement, mais qui ne sont maintenant nulle part.Compatibilité binaire entre avr-gcc 3.4.0 et avr-gcc 4.3.x

Ma question est la suivante, à condition de compiler mon application avec avr-gcc version 3.4.0 (et de lier cette libXXX "spéciale") à une image binaire fonctionnelle, est-il raisonnable de penser que je pourrais compiler tous les autres parties de mon application avec avr-gcc 4 (cette action ayant des avantages très agréables et prouvés), un lien avec libXXX et toujours obtenir un programme de travail?

Essentiellement, tout se résume à: est avr-gcc binaire compatible avec "mystérieux compilateur X qui peut-être av-avr-gcc 3.quelque chose"?

Pour être honnête, j'ai réussi à compiler le reste de mon application avec avr-gcc4 et l'ai lié à la bibliothèque, et vérifié que le résultat fonctionne, mais quel type d'effets secondaires ou bizarreries devrais-je être à l'affût ?

+1

Cela semble être un moment opportun pour mentionner ce que vous savez probablement déjà: les sauvegardes et le contrôle des révisions sont vos amis .... mais vous deviez les utiliser dans le passé pour obtenir le bénéfice du présent. Il n'est jamais trop tard pour commencer, et votre futur moi vous remerciera ;-) – RBerteig

+0

comme je l'ai dit, j'ai hérité de cette situation ... depuis lors, le contrôle des révisions a été rétabli mais ça ne m'aide toujours pas :) – Manjabes

Répondre

2

Lier les bibliothèques de différents compilateurs (ou -versions) va fonctionner de manière fiable si les deux compilateurs utilisent le même ABI (Application Binary Interface)

L'ABI d'une plate-forme spécifique est typiquement spécifié par le compilateur dominant pour cette plate-forme, mais cela pourrait être fait en référençant une spécification externe.
Les modifications ABI sont rares, en particulier si la plate-forme prend en charge des bibliothèques/applications tierces, car un changement ABI signifie que tout doit littéralement être reconstruit.

Questions connexes