Les symboles d’object remplacent les symboles de bibliothèque?

Lorsque vous définissez la même fonction (non statique) dans deux fichiers source C différents, que vous les comstackz et que vous les liez avec l’éditeur de liens Microsoft, vous obtenez un message d’erreur de symbole dupliqué, comme prévu.

Par contre, lorsque vous définissez une fonction qui correspond au nom d’une fonction de bibliothèque standard, par exemple cos (qui n’est pas définie comme COMDAT), il n’y a pas d’erreur. votre définition remplace en silence la définition de la bibliothèque standard. C’est également le comportement souhaité, mais j’essaie de comprendre quelle est la règle exacte.

La règle «symboles définis dans un fichier object remplace-t-elle les symboles définis dans un fichier de bibliothèque» ou autre chose? Je ne trouve aucune mention de cela dans la spécification PE, mais peut-être que je néglige quelque chose.

Le lieur MS ne lie que les objects membres des bibliothèques statiques nécessaires pour résoudre les dépendances. Les objects membres non utilisés des bibliothèques statiques sont optimisés. Par conséquent, si vous avez un symbole en double dans un object membre de bibliothèque statique, mais que l’object membre n’est pas nécessaire, aucune erreur ne se produit. Voir aussi: http://msdn.microsoft.com/en-us/library/72zdcz6f.aspx

Il semble que l’éditeur de liens MS prenne également en charge certains symboles faibles: http://support.microsoft.com/kb/148652/EN-US http://nikoniko-programming.blogspot.ch/2010/09/aliasing-symbol -names-pendant-link-time.html

Mais je ne peux pas trouver cela dans le MSDN.