Bon ok j'ai compris maintenant ;-) C'est normal, gcc n'a aucun moyen de savoir que tu ne vas pas utiliser tous les symboles d'un objet que tu lies, ou que cet objet n'utilise pas lui-même tous ses propres symboles. Car cette information est uniquement connue au moment de la compilation d'une unité. Exemple: A.c defini FA() mais ne l'utilise pas, lorsque gcc le compile, il n'enlève pas FA() car il pourrait-être utilisé dans une autre unité; lorsque tu linke ton B.o (qui n'utilise toujours pas FA()) à A.o, gcc ne sait plus que FA() n'est pas utilisé par A.c et ne peut donc l'enlever. Regarde du côté de http://gcc.gnu.org/wiki/LinkTimeOptimization qui doit répondre à ce problème. Je n'en sais pas plus, désolé. Peut-être vas-tu devoir recompiler binutils et gcc pour cela.
PS: Si tu ne les connaissais pas, les outils nm, objdump et strip devraient pouvoir t'aider à voir ce qu'il se passe.
[^] # Re: Template programming
Posté par benja . En réponse au message Faire une réduction de code en supprimant les fonctions non utilisées. Évalué à 1.
Bon ok j'ai compris maintenant ;-) C'est normal, gcc n'a aucun moyen de savoir que tu ne vas pas utiliser tous les symboles d'un objet que tu lies, ou que cet objet n'utilise pas lui-même tous ses propres symboles. Car cette information est uniquement connue au moment de la compilation d'une unité. Exemple: A.c defini FA() mais ne l'utilise pas, lorsque gcc le compile, il n'enlève pas FA() car il pourrait-être utilisé dans une autre unité; lorsque tu linke ton B.o (qui n'utilise toujours pas FA()) à A.o, gcc ne sait plus que FA() n'est pas utilisé par A.c et ne peut donc l'enlever. Regarde du côté de http://gcc.gnu.org/wiki/LinkTimeOptimization qui doit répondre à ce problème. Je n'en sais pas plus, désolé. Peut-être vas-tu devoir recompiler binutils et gcc pour cela.
PS: Si tu ne les connaissais pas, les outils nm, objdump et strip devraient pouvoir t'aider à voir ce qu'il se passe.