2009-03-24 5 views
0

Je viens de déplacer du code d'une plate-forme à une autre qui nécessitait une modification des versions du compilateur. Deux des sources d'utilitaires ont causé des problèmes de liaison avec des symboles non définis, pour cet exemple, appelez-les Foo.c et Foo.h.Quelqu'un peut-il expliquer cette différence d'éditeur de liens entre g ++ 3.4.2 et g ++ 4.1.2?

Tout compilait et liait très bien avec g ++ 3.4.2 et je pensais que le passage à g ++ 4.1.2 serait une évidence. Lors de l'utilisation de 4.1.2, la compilation s'est bien déroulée mais la liaison a échoué en raison de symboles indéfinis. Les symboles pour chaque fonction dans Foo qui ont été utilisés dans d'autres fichiers sources, à savoir. Bar.c, n'étaient pas définis même si Foo.h était inclus dans Bar.c.

Le problème était que le fichier Foo.c n'incluait pas Foo.h. Donc la question est, comment g ++ 3.4.2 lier ce code lorsque 4.1.2 ne pouvait pas? Je suppose que 3.4.2 attendait un fichier .h et l'incluait ensuite "magiquement" afin d'éviter ce problème. Mais est-ce que quelqu'un a une meilleure explication?

Répondre

4

Il existe une différence ABI entre 3.4 et 4.1, assurez-vous d'avoir nettoyé et recompilé le projet. Et mis à jour toutes les bibliothèques que vous liez.

Questions connexes