GCC -Exporte dekorierte Funktionsname nur von DLL
-
22-09-2019 - |
Frage
Ich habe eine DLL, es exportiert eine Funktion ...
extern "C"
int __stdcall
MP_GetFactory( gmpi::IMpUnknown** returnInterface )
{
}
Ich kompile dies mit Code :: Blocks GCC Compiler (v3.4.5). Problem: resultierende DLL -Exporte dekorierter Funktionsname ...
MP_GetFactory@4
Dies kann nicht geladen, sollte einfach alt sein ...
MP_GetFactory
Ich habe dies für ungefähr 4 Stunden recherchiert. Ich denke, --add-stdcall-alias ist die Option, dies zu beheben. Mein Code :: Blocks Protokoll zeigt ...
mingw32-g ++. exe -shared -wl,-out-Implib = bin debug libgaingcc.a-wl,-dll obj debug se_sdk3 mp_sdk_audio.o obj debug se_sdk3 mp_sdk_common Gain gain.o obj debug gain gain.res -o bin debug gaingcc.sem --add -stdcall -alias -luser32
..so ich denke das ist die richtige Option dort? Aber kein Glück. Abhängige Walker zeigt nur den dekorierten Namen, der exportiert wird. Ich habe es dazu gebracht, __CDECL anstelle von __stdcall zu arbeiten, der Name wird dann OK exportiert, aber die Funktion verfälscht den Stapel, wenn er aufgerufen wird (weil der Anrufer die andere Anrufkonvention erwartet hat).
Lösung
Tut mir leid, meine eigene Frage zu beantworten, schließlich herausgefunden.
Projekt-/Build-Optionen/Linker/andere Linkeroptionen -wl,-Kill-at
... tötet die Dekoration '@' Symbol usw.
Andere Tipps
Ich denke, es sollte-wl,-adddcall-alias und die Tricks "Kill-at" sein, die die generierte Importbibliotheksdatei nicht verwendbar machen.