[GCC] Naem mangling

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • elgringo
  • Registratie: Januari 2001
  • Laatst online: 16-09 20:30
Ik heb een opensource C++ library. Deze probeer in met MingW op win64 en linux te bouwen. Linux werkt zonder problemen, Win 64 geeft linker errors.

Deze error treed op bij 1 functie:
bool SendMessage( SpectroMessage *msg );

Op Linux wordt deze gemangled tot
_ZN7Spectro11SendMessageEP14SpectroMessage

En voor Windows
_ZN7Spectro12SendMessageAEP14SpectroMessage

Terug naar C++ naamgeving (demangler.com)
Linux: Spectro::SendMessage(SpectroMessage*)
Windows: Spectro::SendMessageA(SpectroMessage*)

Terwijl Windows en Linux target beide _ZN7Spectro11SendMessageEP14SpectroMessage verwachten (met NM achterhaald). Ik kom er niet achter waar deze 'A' vandaan komt en waarom die op Linux wel goed gaat en op windows niet. Library wordt met dezelfde flags gebouwd (-std=gnu++98 -Wall -Wno-long-long -pedantic -O3). Ik weet niet meer waar het het moet zoeken... Wie heeft wat tips in de aanbieding.

if broken it is, fix it you should


Acties:
  • +1 Henk 'm!

  • Mijzelf
  • Registratie: September 2004
  • Niet online
In de Windows API heb je 2 versies van SendMessage, SendMessageA en SendMessageW. De eerste voor een Ansi omgeving, de tweede voor Unicode (wide).
In windows.h of iets dergelijks staat
C:
1
2
3
4
5
#ifdef _ANSI_
# define SendMessage SendMessageA
#else
# define SendMessage SendMessageW
#endif
Daar komt die A vandaan. Wat je moet doen is ergens een '#undef SendMessage' in je code opnemen. Of een andere functienaam gebruiken.

(Overigens zit deze constructie erin voor een hoop functienamen. PostMessage SetText, ...)

Acties:
  • 0 Henk 'm!

  • elgringo
  • Registratie: Januari 2001
  • Laatst online: 16-09 20:30
Hartstikke bedankt; dat was hem inderdaad :)

if broken it is, fix it you should