GCC kompiliert eine DLL mit __stdcall

8

Wenn wir eine DLL mit __stdcall in Visual Studio 2008 kompilieren, sind die kompilierten Funktionsnamen in der DLL.

Funktionsname

Wenn wir jedoch dieselbe DLL mit GCC mit wx-dev-cpp kompilieren, fügt GCC die Anzahl der Parameter hinzu, die die Funktion hat, daher sieht der Name der Funktion, die Dependency walker verwendet, aus.

Funktionsname @ numberOfParameters oder == FunctionName @ 8

Wie sagst du dem GCC-Compiler, @nn aus exportierten Symbolen in der DLL zu entfernen?

    
Chad 20.09.2008, 07:46
quelle

3 Antworten

5

__ stdcall ziert den Funktionsnamen, indem er dem Start einen Unterstrich und am Ende die Anzahl der Parameterbyte hinzufügt (getrennt durch @).

Also, eine Funktion:

%Vor%

... würde _Foo @ 8 werden.

Wenn Sie den Funktionsnamen (undecorated) im Abschnitt EXPORTS Ihrer DEF-Datei aufführen, wird er undekoriert exportiert.

Vielleicht ist das der Unterschied?

    
Roger Lipscombe 20.09.2008, 07:53
quelle
6

Verwenden Sie einfach -Wl,--kill-at in der gcc-Befehlszeile, die --kill-at an den Linker weitergibt.

Referenzen:

CesarB 31.10.2008 20:08
quelle
0

Sie können -Wl,--add-stdcall-alias auch für Ihre Linker-Optionen in GCC verwenden. Dies stellt sicher, dass beide Funktionsnamen (dekoriert und undekoriert) vorhanden sind und als Alias ​​verwendet werden können.

    
Matthias 10.06.2014 09:14
quelle

Tags und Links