Retourner aux forums || Retourner au forum Programmation.c

Programmation.c : Gcc, les symboles, les underscores, et windows

Posté par cho7 (page perso, ) le 26 avril 2005
0
Bonjour,

en compilant un programme maison ce matin au taf via cygwin, j'ai été obligé de retirer l'underscore qui débutait chacun des noms de mes variables externes, car gcc semblait me le rajouter à la compilation dans la table des symboles

Ainsi, si j'avais un export char _plop, après compilation
nm me trouvait le symbole __plop. Plutot génant pour linker ensuite, c'est ainsi que ld plantait lamentablement en me sortant un undefined reference to __plop

Bref, pourquoi ?

Merci.

--
le python, c'est bon
> Lire le message (4 commentaires, moyenne: 1,5).  

Cette discussion est archivée, il n'est plus possible de laisser des commentaires.

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.

ABI C definie sur l'OS.

Posté par Edouard Gomez (page perso, ) le 26/04/2005 à 16:06. (lien). Évalué à 3.

Sous Win32 l'ABI C impose de prefixer tout symbole par un underscore lorsque celui ci utilise la convention d'appel C standard.

De meme les symboles utilisant la convention stdcall (toute l'api win32 par ex), ne prefixe pas, mais ajoute un suffixe @${n} ou n est la taille totale prise par les arguments sur la pile si je me souviens bien.

Sous GNU/Linux, l'ABI C suivie n'est pas la meme.

Voila la raison :-)

En general, la solution consiste à avoir une macro:
#if defined ( _WIN32)
SYMBOL_NAME(symbol_name) _##symbol_name
#else if defined (__linux__)
SYMBOL_NAME(symbol_name) ##symbol_name
#else
#error SYMBOL_NAME not defined !!!
#endif

Je te laisse en exercise le soin de corriger les erreurs eventuelle de cette macro non testée.

  • [^]Re: ABI C definie sur l'OS.

    Posté par cho7 (page perso, ) le 26/04/2005 à 16:40. (lien). Évalué à 2.

    Voila la raison :-)
    Merci beaucoup, explication simple et efficace :)

    --
    le python, c'est bon

[+] y a pas à tortiller

Posté par TazForEver () le 26/04/2005 à 17:53. (lien). Évalué à -1.

les symboles qui commencent ou finissent par un underscore sont réservés à l'implémentation. Donc n'utilise pas ce genre de choses.

  • [^]Re: y a pas à tortiller

    Posté par gc (page perso, ) le 27/04/2005 à 11:23. (lien). Évalué à 2.

    Euh, tu peux me trouver une référence de cette affirmation ?

Revenir en haut de page || Retourner aux forums || Retourner au forum Programmation.c