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.
# ABI C definie sur l'OS.
Posté par Edouard Gomez . En réponse au message Gcc, les symboles, les underscores, et windows. Évalué à 3.
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.