====Conversion des prototypes en symboles (mangling)==== ===Cas général=== En ''C'', c'est simple : - Pour une variable globale exportées, on prend le nom de la variable. - Pour les fonctions exportées, on prend le nom de la fonction uniquement, sans le type de retour ni les arguments. Ce qui explique que la surcharge n'est pas possible en ''C''. - Si on est en 32 bits, on préfixe le symbole par un ''_''. Exemple : int tt; int tt4(int, int) { return 0; } Donnera en 32 bits : _tt _tt4 et en 64 bits : tt tt4 ===Windows=== Sous Windows, il est possible de préfixer le prototype par ''%%__%%stdcall'' pour faire la liaison avec les API 32 bit de Windows. Cela ajoute au symbole un postfixe ''@'' suivi d'un nombre égal à 4 fois le nombre d'argument. En 64 bit, aucun postfixe n'est ajouté. Exemple : int __stdcall tt2() { return 0; } int __stdcall tt3(int) { return 0; } int __stdcall tt5(int, char) { return 0; } int __stdcall tt6(int, char, int) { return 0; } int __stdcall tt7(char) { return 0; } int __stdcall tt8(long) { return 0; } Donnera en 32 bits : _tt2@0 _tt3@4 _tt5@8 _tt6@12 _tt7@4 _tt8@4 et en 64 bits : tt2 tt3 tt5 tt6 tt7 tt8 ====Documentation complète==== La documentation est un peu ancienne mais c'est une bonne base. Depuis, les lieurs ont amélioré l'optimisation mais le principe reste le même. [[https://www.airs.com/blog/archives/38|Linkers part 1]], [[https://www.airs.com/blog/archives/39|2]], [[https://www.airs.com/blog/archives/40|3]], [[https://www.airs.com/blog/archives/41|4]], [[https://www.airs.com/blog/archives/42|5]], [[https://www.airs.com/blog/archives/43|6]], [[https://www.airs.com/blog/archives/44|7]], [[https://www.airs.com/blog/archives/45|8]], [[https://www.airs.com/blog/archives/46|9]], [[https://www.airs.com/blog/archives/47|10]], [[https://www.airs.com/blog/archives/48|11]], [[https://www.airs.com/blog/archives/49|12]], [[https://www.airs.com/blog/archives/50|13]], [[https://www.airs.com/blog/archives/51|14]], [[https://www.airs.com/blog/archives/52|15]], [[https://www.airs.com/blog/archives/53|16]], [[https://www.airs.com/blog/archives/54|17]], [[https://www.airs.com/blog/archives/55|18]], [[https://www.airs.com/blog/archives/56|19]], [[https://www.airs.com/blog/archives/57|20]]. {{ :lang:c:lieur:airs_ian_lance_taylor_linkers_2020-07-16_08_40_11_.html |Archive du 26/09/2007 le 16/07/2020}}