GCC kompiliert eine DLL mit __stdcall
-
01-07-2019 - |
Frage
Wenn wir eine DLL mit __stdcall in Visual Studio 2008 kompilieren, lauten die Namen der kompilierten Funktionen in der DLL.
Funktionsname
Wenn wir jedoch dieselbe DLL mit GCC und wx-dev-cpp kompilieren, hängt GCC die Anzahl der Parameter an, die die Funktion hat, sodass der Name der Funktion mit Dependency Walker so aussieht.
FunctionName@numberOfParameters oder == FunctionName@8
Wie weisen Sie den GCC-Compiler an, @nn aus exportierten Symbolen in der DLL zu entfernen?
Lösung
__ stdcall ziert die Funktionsnamen durch einen Unterstrich zu Beginn des Hinzufügen und die Anzahl von Bytes von Parametern an das Ende (getrennt durch @).
So eine Funktion:
void __stdcall Foo(int a, int b);
... würde _foo @ 8.
Wenn Sie die Funktionsnamen (undecorated) im EXPORTS-Abschnitt Ihrer DEF-Datei auflisten, wird exportiert undecorated.
Vielleicht ist dies der Unterschied?
Andere Tipps
Just -Wl,--kill-at
auf der gcc Befehlszeile verwenden, die --kill-at
an den Linker übergeben wird.
Referenzen:
Sie können auch verwenden -Wl,--add-stdcall-alias
zu Ihren Linker-Optionen in GCC.Dadurch wird sichergestellt, dass beide Funktionsnamen (dekoriert und nicht dekoriert) vorhanden sind und als Alias verwendet werden können.